题面

题目描述

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能摘到得最多的花生颗数。

样例

  1. 2
  2. 2 2
  3. 1 1
  4. 3 4
  5. 2 3
  6. 2 3 4
  7. 1 6 5
  1. 8
  2. 16

思路

考虑使用 DP,用集合 dp[i][j] 表示从起点(即 dp[1][1])到点 (i,j) 的所有路线,其中 dp[i][j] 的数值表示这个集合的每条路线中摘到花生数的最大值。那么 dp[r][c] 即为最终答案。下面推导状态转移方程。

  1. 初始化:所有点的值均为原地图值(边界为0)
    具体实现方式:
    1. #include<bits/stdc++.h>
    2. using namespace std;
    3. int dp[105][105];//全局变量即可初始化为0
    4. int main()
    5. {
    6. int T;
    7. cin>>T;//读入T组数据
    8. while(T--)
    9. {
    10. int r,c;
    11. scanf("%d%d",&r,&c);//每组数据读入地图长宽
    12. for(register int i(1);i<=r;++i)//register, i(1), ++i 均为卡常优化
    13. for(register int j(1);j<=c;++j)
    14. scanf("%d",&dp[i][j]);//读入地图
    15. ...
    16. }
    17. }
  2. 每次到一个点摘花生的最大值=前面到这个点的最大值+这个点
    那么,前面到这个点的最大值怎么求呢?
    由于只能朝右或下走,所以前面到这个点只能从左侧或上边来,所以说,只要将左侧 dp[i][j-1] 与上边 dp[i-1][j]max 即可。
    具体实现方法:
    1. for(register int i(1);i<=r;++i)
    2. for(register int j(1);j<=c;++j)
    3. dp[i][j]=max(dp[i-1][j],dp[i][j-1])+dp[i][j];//按照前面推导的思路进行dp
  3. 输出 dp[r][c] 即可。
    具体实现方法:
    1. printf("%d\n",dp[r][c]);//读出最后一个点能摘到的最多花生

最后附上完整代码

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. int dp[105][105];//全局变量即可初始化为0
  4. int main()
  5. {
  6. int T;
  7. cin>>T;//读入T组数据
  8. while(T--)
  9. {
  10. int r,c;
  11. scanf("%d%d",&r,&c);//每组数据读入地图长宽
  12. for(register int i(1);i<=r;++i)//register, i(1), ++i 均为卡常优化
  13. for(register int j(1);j<=c;++j)
  14. scanf("%d",&dp[i][j]);//读入地图
  15. for(register int i(1);i<=r;++i)
  16. for(register int j(1);j<=c;++j)
  17. dp[i][j]=max(dp[i-1][j],dp[i][j-1])+dp[i][j];//按照前面推导的思路进行dp
  18. printf("%d\n",dp[r][c]);//读出最后一个点能摘到的最多花生
  19. }
  20. }

【一本通基础DP基础模型】摘花生的更多相关文章

  1. 基础dp

    队友的建议,让我去学一学kuangbin的基础dp,在这里小小的整理总结一下吧. 首先我感觉自己还远远不够称为一个dp选手,一是这些题目还远不够,二是定义状态的经验不足.不过这些题目让我在一定程度上加 ...

  2. 【专章】dp基础

    知识储备:dp入门. 好了,完成了dp入门,我们可以做一些稍微不是那么裸的题了. ----------------------------------------------------------- ...

  3. 基础DP(初级版)

    本文主要内容为基础DP,内容来源为<算法导论>,总结不易,转载请注明出处. 后续会更新出kuanbin关于基础DP的题目...... 动态规划: 动态规划用于子问题重叠的情况,即不同的子问 ...

  4. HDU 3537 基础翻硬币模型 Mock Turtles 向NIM转化

    翻硬币游戏,任意选3个,最右边的一个必须是正面.不能操作者败. 基本模型..不太可能自己推 还是老实记下来吧..对于单个硬币的SG值为2x或2x+1,当该硬币的位置x,其二进制1的个数为偶数时,sg= ...

  5. hdu 5586 Sum 基础dp

    Sum Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Problem Desc ...

  6. 【学习笔记】dp基础

    知识储备:dp入门. 好了,完成了dp入门,我们可以做一些稍微不是那么裸的题了. dp基础,主要是做题,只有练习才能彻底掌握. 洛谷P1417 烹调方案 分析:由于时间的先后会对结果有影响,所以c[i ...

  7. hdu 4055 Number String (基础dp)

    Number String Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)To ...

  8. 训练指南 UVA - 10917(最短路Dijkstra + 基础DP)

    layout: post title: 训练指南 UVA - 10917(最短路Dijkstra + 基础DP) author: "luowentaoaa" catalog: tr ...

  9. 训练指南 UVA - 11324(双连通分量 + 缩点+ 基础DP)

    layout: post title: 训练指南 UVA - 11324(双连通分量 + 缩点+ 基础DP) author: "luowentaoaa" catalog: true ...

随机推荐

  1. 关于div及display

    1.DIV div被看作是一个盒子,可以设置width.height.这个盒子其实是由三部分构成width(height).padding.border.在默认情况下,所见到的div是border和p ...

  2. logging日志模块详细,日志模块的配置字典,第三方模块的下载与使用

    logging日志模块详细 简介 用Python写代码的时候,在想看的地方写个print xx 就能在控制台上显示打印信息,这样子就能知道它是什么 了,但是当我需要看大量的地方或者在一个文件中查看的时 ...

  3. 使用python获取交换机syslog日志并使用jQuery在html上展示

    需求 现网有部分pop点独立于海外,无法发送日志给内网日志服务器,同时最近网内有比较重要割接,所以临时写一个脚本来展示网内日志 思路 使用socket接收syslog数据,udp 514,数据部分格式 ...

  4. TENSEAL: A LIBRARY FOR ENCRYPTED TENSOR OP- ERATIONS USING HOMOMORPHIC ENCRYPTION 解读

    本文记录阅读该paper的笔记,这篇论文是TenSeal库的原理介绍. 摘要 机器学习算法已经取得了显著的效果,并被广泛应用于各个领域.这些算法通常依赖于敏感和私有数据,如医疗和财务记录.因此,进一步 ...

  5. java继承中关于super关键字和this关键字的使用

    1.super关键字 由于子类不能继承父类的构造方法,因此,如果要调用父类的构造方法,可以使用 super 关键字.super 可以用来访问父类的构造方法.普通方法和属性.super 关键字的功能: ...

  6. cuda在ubuntu的安装使用分享

    前言 之前给大家分享过opencv在jetson nano 2gb和ubuntu设备中使用并且展示了一些人脸识别等的小demo.但是对于图像处理,使用gpu加速是很常见 .(以下概念介绍内容来自百科和 ...

  7. 【clickhouse专栏】clickhouse性能为何如此卓越

    在<clickhouse专栏>上一篇文章中<数据库.数据仓库之间的区别与联系>,我们介绍了什么是数据库,什么是数据仓库,二者的区别联系.clickhouse的定位是" ...

  8. NPM Error:gyp: No Xcode or CLT version detected!

    问题 最近在macOS Catalina中使用npm安装模块,经常会出现如下错误: > node-gyp rebuild No receipt for 'com.apple.pkg.CLTool ...

  9. 线上问题定位利器 jprofiler

    1.导出dump windows: jps -l   查看Java进行 jmap -dump:format=b,file=webapi.hprof 20840 查看进程,根据进程号导出hprof文件 ...

  10. Vue回炉重造之图片加载性能优化

    前言 图片加载优化对于一个网站性能好坏起着至关重要的作用.所以我们使用Vue来操作一波.备注 以下的优化一.优化二栏目都是我自己封装在Vue的工具函数里,所以请认真看完,要不然直接复制的话,容易出错的 ...