当前位置: 首页 > news >正文

信息学奥赛复赛复习11-CSP-J2020-04方格取数-动态规划、斐波那契数列、最优子结构、重叠子问题、无后效性

PDF文档回复:20241004

1 P7074 [CSP-J2020] 方格取数

[题目描述]

设有 n×m 的方格图,每个方格中都有一个整数。现有一只小熊,想从图的左上角走到右下角,每一步只能向上、向下或向右走一格,并且不能重复经过已经走过的方格,也不能走出边界。小熊会取走所有经过的方格中的整数,求它能取到的整数之和的最大值

[输入格式]

第一行有两个整数 n,m

接下来 n行每行 m 个整数,依次代表每个方格中的整数

[输出格式]

一个整数,表示小熊能取到的整数之和的最大值

[输入输出样例]

输入 #1

3 4
1 -1 3 2
2 -1 4 -1
-2 2 -3 -1

输出 #1

9

输入 #2

2 5
-1 -1 -3 -2 -7
-2 -1 -4 -1 -2

输出 #2

-10

说明/提示

数据规模

对于 20% 的数据,n,m≤5

对于 40% 的数据,n,m≤50

对于 70% 的数据,n,m≤300

对于 100% 的数据,1≤n,m≤10^3。方格中整数的绝对值不超过 10^4

2 相关知识点

动态规划

动态规划(Dynamic Programming) 是在20世纪50年代由美国数学家理查德-贝尔曼(Richard Bellman)发明的。

把原问题分解成若干子问题,自底向上求解最小子问题,把子问题的解存储到表格中,然后求解较大问题,求解原问题的解时,需要用到较小子问题的解,可以直接从表格中查询较小子问题的解,避免重复计算,从而提高求解效率

例题 斐波那契数列

如下图

f(3)用到了3次,f(4)用到了2次,在用动态规划解决问题时,f(3)计算1次存储表格,f(4)计算1次存储表格,在使用时直接从表格取,避免重复计算,提高了速度

特别是在求较大斐波那契数时,避免了大量计算,大大提高了算法的响应时间

动态规划解决问题,一般具有如下性质

最优子结构

当一个问题的最优解包含着它的子问题的最优解时,称此问题具有最优子结构性质

也可以认为如果对每个子问题的最优解可以构建全局最优解,说明具有最优子结构

斐波那契数列例子中

f(5)=f(4)+f(3) ,f(5)的解可以通过f(4)和f(3)求出,说明具有最优子结构

如果求问题f(5)的解和子问题f(4),f(3)等子问题的解无关,则说明不具有最优子结构

重叠子问题

重叠子问题是指求解问题的过程中,每次求解的问题并不是总是新问题,有大量的重复问题存在。

斐波那契数列例子中

f(3)用到了3次,f(4)用到了2次,只计算1次,存储到数组中,后续使用时直接O(1)的时间复杂度直接取出

重叠子问题时动态规划效率高的主要原因

无后效性

把原问题分解成若干子问题,每个子问题求解都作为一个阶段,求解当前阶段解时,只与之前已经求出之前阶段的解有关,和之后未求出的阶段无关,这种称作无后效性

由于之前阶段问题的解已经求出,因此无后效性是可以使用动态规划的前提

斐波那契数列例子中

求解f(5)与f(4)和f(3)有关,不与f(5)以后的解有关,说明其具备无后效性

关键连接 -动态转移方程

动态规划解决问题时,把问题分解成一个个小问题,每个问题求解时作为一个阶段。当前阶段和下一个阶段存在着某种联系,这种确定的联系,一定存在着某种方程式(根据前一阶段通过某种关系式计算出下一阶段),叫做动态转移方程

3 思路分析

1 可以向上、向下或向右3个方向走,因此i,j位置只会依赖上,下,左3方向
2 第1列i,j位置,只会依赖上一个方向,所以第1列所有最大累加和可以先计算
3 按列逐层推进,只需要考虑上和下2个方向
示例数据
3 4
1 -1 3 2
2 -1 4 -1
-2 2 -3 -1
dp[i][j]表示从1,1走到i,j的最大累加和
可以通过down和up数组取最大值获得,max(down[i][j],up[i][j])
例如dp[1][2]=max(down[1][2],up[1][2])
具体如下图红色单元格

示例程序

#include<bits/stdc++.h>
using namespace std;typedef long long LL;
const int N=1e3+10;//表格长宽最大值 
int ipt[N][N];//输入到方格的数
/*
down[i][j] i列从长到下的累加到j最大和
up[i][j] i从下到上的累加到j最大和
dp[i][j] 从1,1开始累加到i,j的最大和
*/ 
LL down[N][N],up[N][N],dp[N][N];
int n,m;//n行 m列 int main(){scanf("%d%d",&n,&m);//输入n行 m列 for(int i=1;i<=n;i++){for(int j=1;j<=m;j++){scanf("%lld",&ipt[i][j]);//输入n行m列个数 }}//对 down,up,dp数组初始值,默认负数最小值,小于-10^4	memset(down,128,sizeof(down));memset(up,128,sizeof(up));memset(dp,128,sizeof(dp));dp[1][1]=ipt[1][1];//dp[1][1] 为ipt[1][1] for(int i=2;i<=n;i++){//累加第1列 赋初始值 dp[i][1]=dp[i-1][1]+ipt[i][1];//第1列只能从上到下 }for(int j=2;j<=m;j++){//计算第2~m列 dp数组的值//计算j列时,j-1列已经计算好 for(int i=1;i<=n;i++){//从上到下计算j列的最大累加和 down[i][j]=max(down[i-1][j],dp[i][j-1])+ipt[i][j];}for(int i=n;i>=1;i--){//从下到上计算j列的最大累加和 up[i][j]=max(up[i+1][j],dp[i][j-1])+ipt[i][j];}/*到i,j位置可能有3个方向(i,j-1),(i-1,j),(i+1,j) (i-1,j)对应down[i][j], (i+1,j)对应up[i][j]其中计算down和up时,都和 (i,j-1)做个比较取最大后+ ipt[i][j]所以down和up都大于 (i,j-1)因此值需要在down[i][j]和up[i][j]取最大即可 */ for(int i=1;i<=n;i++){ dp[i][j]=max(down[i][j],up[i][j]);}}cout<<dp[n][m];//输出从左上角走到n,m的最大值 return 0;
} 

相关文章:

信息学奥赛复赛复习11-CSP-J2020-04方格取数-动态规划、斐波那契数列、最优子结构、重叠子问题、无后效性

PDF文档回复:20241004 1 P7074 [CSP-J2020] 方格取数 [题目描述] 设有 nm 的方格图&#xff0c;每个方格中都有一个整数。现有一只小熊&#xff0c;想从图的左上角走到右下角&#xff0c;每一步只能向上、向下或向右走一格&#xff0c;并且不能重复经过已经走过的方格&#x…...

Hive数仓操作(十二)

一、Hive 中的行列转换 1. 行转列&#xff1a; collect_list() collect_list() 函数用于将一个列中的数据收集成一个数组。 示例数据文件 假设有一个名为 orders.txt 的文件&#xff0c;内容如下&#xff1a; 1,101 1,101 1,103 2,104 2,105导入数据到 Hive 表 首先&…...

计算机毕业设计 基于SpringBoot和Vue的课程教学平台的设计与实现 Java实战项目 附源码+文档+视频讲解

博主介绍&#xff1a;✌从事软件开发10年之余&#xff0c;专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精…...

有状态(Session) VS 无状态(Token)

目录 概念 JWT Token在项目中使用 概念 有状态和无状态服务是两种不同的服务架构&#xff0c;两者的不同之处在于对于服务状态的处理。 1、有状态服务 是指程序在执行过程中生成的中间数据&#xff0c;服务器端一般都要保存请求的相关信息&#xff0c;每个请求可以默认地使…...

天坑!Spark+Hive+Paimon+Dolphinscheduler

背景: 数据中台项目使用Spark+Hive+Paimon做湖仓底层,调度任务使用的是基于Dolphinscheduler进行二开。在做离线脚本任务开发时,在Paimon库下执行非查询类SQL报错。 INSERT报错 DELETE报错 现状: 原始逻辑为数据中台中选择的Paimon数据源,实际上在Dolphinscheduler中是…...

JAVA——IO框架

目录 一、框架 二、导入框架步骤 三、测试 一、框架 框架就是为了解决某类问题&#xff0c;编写的一套类、接口等。大多数框架都是第三方研发的 好处: 在框架的基础上开发&#xff0c;提高开发效率 框架的形式&#xff1a;一般是把类、接口编译成class形式&#xff0c;再…...

项目管理系统如何实现项目申报流程自动化?

传统的项目申报流程往往繁琐复杂&#xff0c;涉及众多环节和部门间的协作&#xff0c;不仅耗时费力&#xff0c;还容易因人为疏忽而导致错误或延误。随着信息技术的飞速发展&#xff0c;项目管理系统的出现为项目申报流程的自动化提供了可能&#xff0c;极大地提升了申报效率和…...

ndb9300public-ndb2excel简介

1 引言 ndb9300是一个自己定义的机载导航数据库劳作&#xff08;不敢称为项目&#xff09;代号&#xff0c;其中3表示是第3种数据库。 多年前&#xff0c;对在役民航客机中的某型机载导航数据库的二进制文件进行分析&#xff0c;弄明白它的数据结构后做了几个工具&#xff0c…...

C++:const成员

const修饰成员变量&#xff0c;要在初始化列表中进行初始化。 const修饰成员函数&#xff0c;要放在函数后&#xff0c;称为常函数。常函数不能修改普通成员变量。 const修饰的对象&#xff0c;称为常对象。常对象不能修改普通成员变量&#xff0c;只能读取。 常对象只能使用…...

基于ROS的激光雷达点云物体检测

环境 RTX 2060&#xff08;后面关于算力&#xff09; ubuntu 18.04 ROS melodic &#xff08;ubuntu 18.04安装ROS melodic可以参看我这篇文章ubuntu 18.04安装ROS系统&#xff09; CUDA 10.0 cudnn 7.6.5 caffe cmake 3.18.0&#xff08;不能低于3.12.2&#xff09; opencv 3…...

大模型训练环境搭建

硬件资源说明 本教程基于GPU 3090的服务器 资源类型 型号 核心指标 CPU Intel(R) Xeon(R) Bronze 3204 CPU 1.90GHz 12核 内存 / 125Gi GPU NVIDIA GeForce RTX 3090 24G显存 注意&#xff1a;接下来的部分命令需要使用科学上网&#xff0c;需要事先配置好。 安…...

使用Java调用GeoTools实现全球国家矢量数据入库实战

目录 前言 一、相关数据介绍 1、无空间参考的数据 2、有空间参考的数据 3、空间信息表物理模型 二、全球国家空间数据入库 1、后台实体类图 2、后台实体对象关键代码 三、时空数据入库实践 1、读取无空间参考数据 2、入库成果及注意事项 四、总结 前言 在当今世界&…...

计算机毕业设计 基于Python的广东旅游数据分析系统的设计与实现 Python+Django+Vue Python爬虫 附源码 讲解 文档

&#x1f34a;作者&#xff1a;计算机编程-吉哥 &#x1f34a;简介&#xff1a;专业从事JavaWeb程序开发&#xff0c;微信小程序开发&#xff0c;定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事&#xff0c;生活就是快乐的。 &#x1f34a;心愿&#xff1a;点…...

Springboo通过http请求下载文件到服务器

这个方法将直接处理从URL下载数据并将其保存到文件的整个过程。下面是一个这样的方法示例&#xff1a; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.HttpURLConnection…...

使用CSS实现酷炫加载

使用CSS实现酷炫加载 效果展示 整体页面布局 <div class"container"></div>使用JavaScript添加loading加载动画的元素 document.addEventListener("DOMContentLoaded", () > {let container document.querySelector(".container&q…...

【STM32-HAL库】AHT10温湿度传感器使用(STM32F407ZGT6配置i2c)(附带工程下载连接)

一、温湿度传感器&#xff1a; 温湿度传感器是一种能够检测环境中的温度和湿度&#xff0c;并将其转化为电信号输出的装置。它在智能家居、工业自动化、气象监测、农业等领域有着广泛的应用。 原理&#xff1a; 温湿度传感器通常基于不同的物理原理&#xff0c;以下是一些常见…...

深入理解网络通信: 长连接、短连接与WebSocket

在现代网络应用开发中,选择合适的通信方式对于应用的性能、效率和用户体验至关重要。本文将深入探讨三种常见的网络通信方式:长连接、短连接和WebSocket,分析它们的特点、区别以及适用场景。 1. 短连接 © ivwdcwso (ID: u012172506) 1.1 定义 短连接是指客户端和服务器…...

Linux·环境变量与进程地址空间

1. 命令行参数 各位可能见过main函数也是有参数的&#xff0c;只是我们平时写的代码都比较简单&#xff0c;用不到main函数的参数&#xff0c;下面我们看一下main函数的参数是什么又是怎么用的 我们看这样一段代码 其编译运行后的效果是这样的 我们将main函数后面的那两个参数叫…...

MYSQL 乐观锁

乐观锁是一种用于处理并发控制的策略&#xff0c;特别适用于读多写少的场景。在 MySQL 数据库中&#xff0c;乐观锁通常通过版本号或时间戳来实现。下面将详细介绍乐观锁的概念、实现方式以及在 MySQL 中的应用。 1. 乐观锁的概念 乐观锁的基本思想是&#xff1a;在对数据进行…...

SpringCloud入门(十二)全局过滤器和跨域

一、全局过滤器 全局过滤器的作用也是处理一切进入网关的请求和微服务响应&#xff0c;与GatewayFilter的作用一样。 区别在于GatewayFilter通过配置定义&#xff0c;处理逻辑是固定的&#xff0c;如果我们希望拦截请求&#xff0c;做自己的业务逻辑则没办法实现。而GlobalFilt…...

Linux链表操作全解析

Linux C语言链表深度解析与实战技巧 一、链表基础概念与内核链表优势1.1 为什么使用链表&#xff1f;1.2 Linux 内核链表与用户态链表的区别 二、内核链表结构与宏解析常用宏/函数 三、内核链表的优点四、用户态链表示例五、双向循环链表在内核中的实现优势5.1 插入效率5.2 安全…...

转转集团旗下首家二手多品类循环仓店“超级转转”开业

6月9日&#xff0c;国内领先的循环经济企业转转集团旗下首家二手多品类循环仓店“超级转转”正式开业。 转转集团创始人兼CEO黄炜、转转循环时尚发起人朱珠、转转集团COO兼红布林CEO胡伟琨、王府井集团副总裁祝捷等出席了开业剪彩仪式。 据「TMT星球」了解&#xff0c;“超级…...

【算法训练营Day07】字符串part1

文章目录 反转字符串反转字符串II替换数字 反转字符串 题目链接&#xff1a;344. 反转字符串 双指针法&#xff0c;两个指针的元素直接调转即可 class Solution {public void reverseString(char[] s) {int head 0;int end s.length - 1;while(head < end) {char temp …...

人机融合智能 | “人智交互”跨学科新领域

本文系统地提出基于“以人为中心AI(HCAI)”理念的人-人工智能交互(人智交互)这一跨学科新领域及框架,定义人智交互领域的理念、基本理论和关键问题、方法、开发流程和参与团队等,阐述提出人智交互新领域的意义。然后,提出人智交互研究的三种新范式取向以及它们的意义。最后,总结…...

【从零学习JVM|第三篇】类的生命周期(高频面试题)

前言&#xff1a; 在Java编程中&#xff0c;类的生命周期是指类从被加载到内存中开始&#xff0c;到被卸载出内存为止的整个过程。了解类的生命周期对于理解Java程序的运行机制以及性能优化非常重要。本文会深入探寻类的生命周期&#xff0c;让读者对此有深刻印象。 目录 ​…...

C# 表达式和运算符(求值顺序)

求值顺序 表达式可以由许多嵌套的子表达式构成。子表达式的求值顺序可以使表达式的最终值发生 变化。 例如&#xff0c;已知表达式3*52&#xff0c;依照子表达式的求值顺序&#xff0c;有两种可能的结果&#xff0c;如图9-3所示。 如果乘法先执行&#xff0c;结果是17。如果5…...

【学习笔记】erase 删除顺序迭代器后迭代器失效的解决方案

目录 使用 erase 返回值继续迭代使用索引进行遍历 我们知道类似 vector 的顺序迭代器被删除后&#xff0c;迭代器会失效&#xff0c;因为顺序迭代器在内存中是连续存储的&#xff0c;元素删除后&#xff0c;后续元素会前移。 但一些场景中&#xff0c;我们又需要在执行删除操作…...

通过MicroSip配置自己的freeswitch服务器进行调试记录

之前用docker安装的freeswitch的&#xff0c;启动是正常的&#xff0c; 但用下面的Microsip连接不上 主要原因有可能一下几个 1、通过下面命令可以看 [rootlocalhost default]# docker exec -it freeswitch fs_cli -x "sofia status profile internal"Name …...

6️⃣Go 语言中的哈希、加密与序列化:通往区块链世界的钥匙

Go 语言中的哈希、加密与序列化:通往区块链世界的钥匙 一、前言:离区块链还有多远? 区块链听起来可能遥不可及,似乎是只有密码学专家和资深工程师才能涉足的领域。但事实上,构建一个区块链的核心并不复杂,尤其当你已经掌握了一门系统编程语言,比如 Go。 要真正理解区…...

数据结构第5章:树和二叉树完全指南(自整理详细图文笔记)

名人说&#xff1a;莫道桑榆晚&#xff0c;为霞尚满天。——刘禹锡&#xff08;刘梦得&#xff0c;诗豪&#xff09; 原创笔记&#xff1a;Code_流苏(CSDN)&#xff08;一个喜欢古诗词和编程的Coder&#x1f60a;&#xff09; 上一篇&#xff1a;《数据结构第4章 数组和广义表》…...