【一本通基础DP基础模型】摘花生
题面
题目描述
Hello Kitty想摘点花生送给她喜欢的米老鼠。她来到一片有网格状道路的矩形花生地(如下图),从西北角进去,东南角出来。地里每个道路的交叉点上都有种着一株花生苗,上面有若干颗花生,经过一株花生苗就能摘走该它上面所有的花生。Hello Kitty只能向东或向南走,不能向西或向北走。问Hello Kitty最多能够摘到多少颗花生。
输入格式
第一行是一个整数T,代表一共有多少组数据。1≤T≤100
接下来是T组数据。
每组数据的第一行是两个整数,分别代表花生苗的行数R和列数 C(1≤R,C≤100)
每组数据的接下来R行数据,从北向南依次描述每行花生苗的情况。每行数据有C个整数,按从西向东的顺序描述了该行每株花生苗上的花生数目M(0≤M≤1000)。
输出格式
对每组输入数据,输出一行,内容为Hello Kitty能摘到得最多的花生颗数。
样例
2
2 2
1 1
3 4
2 3
2 3 4
1 6 5
8
16
思路
考虑使用 DP,用集合 dp[i][j] 表示从起点(即 dp[1][1])到点 (i,j) 的所有路线,其中 dp[i][j] 的数值表示这个集合的每条路线中摘到花生数的最大值。那么 dp[r][c] 即为最终答案。下面推导状态转移方程。
- 初始化:所有点的值均为原地图值(边界为0)
具体实现方式:#include<bits/stdc++.h>
using namespace std;
int dp[105][105];//全局变量即可初始化为0
int main()
{
int T;
cin>>T;//读入T组数据
while(T--)
{
int r,c;
scanf("%d%d",&r,&c);//每组数据读入地图长宽
for(register int i(1);i<=r;++i)//register, i(1), ++i 均为卡常优化
for(register int j(1);j<=c;++j)
scanf("%d",&dp[i][j]);//读入地图
...
}
}
- 每次到一个点摘花生的最大值=前面到这个点的最大值+这个点
那么,前面到这个点的最大值怎么求呢?
由于只能朝右或下走,所以前面到这个点只能从左侧或上边来,所以说,只要将左侧dp[i][j-1]与上边dp[i-1][j]取max即可。
具体实现方法:for(register int i(1);i<=r;++i)
for(register int j(1);j<=c;++j)
dp[i][j]=max(dp[i-1][j],dp[i][j-1])+dp[i][j];//按照前面推导的思路进行dp
- 输出
dp[r][c]即可。
具体实现方法:printf("%d\n",dp[r][c]);//读出最后一个点能摘到的最多花生
最后附上完整代码
#include<bits/stdc++.h>
using namespace std;
int dp[105][105];//全局变量即可初始化为0
int main()
{
int T;
cin>>T;//读入T组数据
while(T--)
{
int r,c;
scanf("%d%d",&r,&c);//每组数据读入地图长宽
for(register int i(1);i<=r;++i)//register, i(1), ++i 均为卡常优化
for(register int j(1);j<=c;++j)
scanf("%d",&dp[i][j]);//读入地图
for(register int i(1);i<=r;++i)
for(register int j(1);j<=c;++j)
dp[i][j]=max(dp[i-1][j],dp[i][j-1])+dp[i][j];//按照前面推导的思路进行dp
printf("%d\n",dp[r][c]);//读出最后一个点能摘到的最多花生
}
}
【一本通基础DP基础模型】摘花生的更多相关文章
- 基础dp
队友的建议,让我去学一学kuangbin的基础dp,在这里小小的整理总结一下吧. 首先我感觉自己还远远不够称为一个dp选手,一是这些题目还远不够,二是定义状态的经验不足.不过这些题目让我在一定程度上加 ...
- 【专章】dp基础
知识储备:dp入门. 好了,完成了dp入门,我们可以做一些稍微不是那么裸的题了. ----------------------------------------------------------- ...
- 基础DP(初级版)
本文主要内容为基础DP,内容来源为<算法导论>,总结不易,转载请注明出处. 后续会更新出kuanbin关于基础DP的题目...... 动态规划: 动态规划用于子问题重叠的情况,即不同的子问 ...
- HDU 3537 基础翻硬币模型 Mock Turtles 向NIM转化
翻硬币游戏,任意选3个,最右边的一个必须是正面.不能操作者败. 基本模型..不太可能自己推 还是老实记下来吧..对于单个硬币的SG值为2x或2x+1,当该硬币的位置x,其二进制1的个数为偶数时,sg= ...
- hdu 5586 Sum 基础dp
Sum Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) Problem Desc ...
- 【学习笔记】dp基础
知识储备:dp入门. 好了,完成了dp入门,我们可以做一些稍微不是那么裸的题了. dp基础,主要是做题,只有练习才能彻底掌握. 洛谷P1417 烹调方案 分析:由于时间的先后会对结果有影响,所以c[i ...
- hdu 4055 Number String (基础dp)
Number String Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)To ...
- 训练指南 UVA - 10917(最短路Dijkstra + 基础DP)
layout: post title: 训练指南 UVA - 10917(最短路Dijkstra + 基础DP) author: "luowentaoaa" catalog: tr ...
- 训练指南 UVA - 11324(双连通分量 + 缩点+ 基础DP)
layout: post title: 训练指南 UVA - 11324(双连通分量 + 缩点+ 基础DP) author: "luowentaoaa" catalog: true ...
随机推荐
- java、selenium、图片滑块验证,底部附本地可测试代码
准备 本地Chrome版本对应WebDriver驱动:http://chromedriver.storage.googleapis.com/index.html maven包 <!-- sele ...
- Java学习笔记-基础语法Ⅳ
多态:同一个对象,在不同时刻表现出来的不同形态 例如: 猫 cat = new 猫(); 动物 animal = new 猫(); 这里的猫在不同时刻表现出来不同的形态,这就是多态 多态的前提和体现: ...
- MyBatisPlus详解
1.MyBatisPlus概述 需要的基础:MyBatis.Spring.SpringMVC 为什么要学习?MyBatisPlus可以节省我们大量工作时间,所有的CRUD代码它都可以自动化完成! 简介 ...
- linux篇-Centos7jdk安装
2.1查看现有JDK #rpm -qa|grep jdk (如果有其他版本的JDK建议卸载) 卸载其他版本的JDK命令 #yum –y remove java-1.6.0 #yum –y remov ...
- 118_Power Pivo周维度度同比、环比相关
博客:www.jiaopengzi.com 焦棚子的文章目录 请点击下载附件 一.背景 在群里看到有人在交流周维度同环比,同时又好多天都没有更新文章了,最近没有什么好的素材,就硬生生的写一个吧. 先来 ...
- swiper使用
swiper使用 初始化 var mySwiper = new Swiper ('容器区域类', { // 存放swiper属性 }) 属性 基本属性: 1.initialSlide 设定初始化时sl ...
- Python模块Ⅱ
Python模块2 part3 模块的分类: 内置模块200种左右:python自带的模块,time os sys hashlib等 第三方模块6000种左右:需要pip install beauti ...
- springSecurity + jwt + redis 前后端分离用户认证和授权
记录一下使用springSecurity搭建用户认证和授权的代码... 技术栈使用springSecurity + redis + JWT + mybatisPlus 部分代码来自:https://b ...
- Random方法中的nextInt(int arg0)方法讲解
nextInt方法会生成一个随机的在5以内的数,负载均衡随机策略底层用的就是这个方法: Random rand = new Random(); int index = rand.nextInt(5); ...
- Spring IOC源码研究笔记(2)——ApplicationContext系列
1. Spring IOC源码研究笔记(2)--ApplicationContext系列 1.1. 继承关系 非web环境下,一般来说常用的就两类ApplicationContext: 配置形式为XM ...