题面

题目描述

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] 即为最终答案。下面推导状态转移方程。

  1. 初始化:所有点的值均为原地图值(边界为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]);//读入地图
    ...
    }
    }
  2. 每次到一个点摘花生的最大值=前面到这个点的最大值+这个点
    那么,前面到这个点的最大值怎么求呢?
    由于只能朝右或下走,所以前面到这个点只能从左侧或上边来,所以说,只要将左侧 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
  3. 输出 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基础模型】摘花生的更多相关文章

  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. MybatisCodeHelperPro简单使用

    1.idea安装 2.连接mysql 3.创建实体等关联类 ,选择数据库表右键选择如图 4配置 生成后的 5简单应用 可以直接生成xml 总结:非常的方便快捷.

  2. 盘点提高国内访问 Github 的速度的 9 种方案

    开源Linux 长按二维码加关注~ 上一篇:一行代码如何隐藏Linux进程? 来源:https://urlify.cn/IFzQRb GitHub 镜像访问 GitHub文件加速 Github 加速下 ...

  3. 【网站】windows phpstudy v8.1搭建https

    这两天在搭建微擎,使用了官方推荐的一键安装环境,在搭建完站点后,想开启https. 发现如下图所示,无论关闭网站,还是关闭nginx.都无法建立https.网上也找不到相关流程,后来试着关闭nginx ...

  4. k8s client-go源码分析 informer源码分析(5)-Controller&Processor源码分析

    client-go之Controller&Processor源码分析 1.controller与Processor概述 Controller Controller从DeltaFIFO中pop ...

  5. 论文解读(gCooL)《Graph Communal Contrastive Learning》

    论文信息 论文标题:Graph Communal Contrastive Learning论文作者:Bolian Li, Baoyu Jing, Hanghang Tong论文来源:2022, WWW ...

  6. 支付宝开放平台--网页&移动应用(一)

    前提是先在支付宝上签约自己需要的支付宝功能,然后支付宝开放平台才能设置你需要的功能 一:支付宝开放平台登录 登录进入支付宝开放平台 二:根据自己的需求创建应用(我是用的网页&移动应用) 三:点 ...

  7. 模块re正则

    正则表达式 内容概要 正则表达式前戏 正则表达式之字符组 正则表达式特殊符号 正则表达式量词 正则表达式贪婪与非贪婪匹配 正则表达式取消转义 python内置模块之re模块 内容详情 正则表达式前戏 ...

  8. LSP原则是什么

    如果这篇文章能够帮到您,请给我一个免费的赞,谢谢QWQ! LSP原则并不难,但是地方就会把它说的很啰嗦,如果你对LSP还是感到疑惑,请往下看看. 先上代码: public class Bird { p ...

  9. 【物联网串口服务器通信经验教程】Modbus网关协议转换

    在前面的文章中,我们已经详细地介绍了Modbus网关的几种主要类型,今天,就让我们来介绍一下其中简单协议转换的处理过程. 简单协议转换是最常规.最普遍的Modbus网关功能,也是数据处理效率最高Mod ...

  10. 菜鸟学git的基本命令及常见错误

    Git init //在当前项目工程下履行这个号令相当于把当前项目git化,变身!\ git config --global user.name "xxx" # 配置用户名 git ...