AcWing1015.摘花生
题目描述
H e l l o K i t t y Hello\ Kitty Hello Kitty想摘点花生送给她喜欢的米老鼠。
她来到一片有网格状道路的矩形花生地(如下图),从西北角进去,东南角出来。
地里每个道路的交叉点上都有种着一株花生苗,上面有若干颗花生,经过一株花生苗就能摘走该它上面所有的花生。
H e l l o K i t t y Hello\ Kitty Hello Kitty只能向东或向南走,不能向西或向北走。
问 H e l l o K i t t y Hello\ Kitty Hello Kitty最多能够摘到多少颗花生。
输入格式
第一行是一个整数T,代表一共有多少组数据。
接下来是T组数据。
每组数据的第一行是两个整数,分别代表花生苗的行数R和列数 C。
每组数据的接下来R行数据,从北向南依次描述每行花生苗的情况。每行数据有C个整数,按从西向东的顺序描述了该行每株花生苗上的花生数目M。
输出格式
对每组输入数据,输出一行,内容为Hello Kitty能摘到得最多的花生颗数。
数据范围
1 ≤ T ≤ 100 , 1≤T≤100, 1≤T≤100,
1 ≤ R , C ≤ 100 , 1≤R,C≤100, 1≤R,C≤100,
0 ≤ M ≤ 1000 0≤M≤1000 0≤M≤1000
输入样例:
2
2 2
1 1
3 4
2 3
2 3 4
1 6 5
输出样例:
8
16
算法
动态规划
定义:定义 f [ i , j ] f[i, j] f[i,j]为从 ( 1 , 1 ) (1,1) (1,1)走到 ( i , j ) (i,j) (i,j)可以摘到的最大花生数量
状态转移:因为每次可以向右边走,向下面走,所以我们把这个状态划分为两种(按前一步的操作划分),一种是从左边走过来(向右),另一种是从上面走过来(向下)。
因为从左走的最大花生数为 f ( i , j − 1 ) f(i ,j - 1) f(i,j−1),从上走的最大花生数为 f ( i − 1 , j ) f(i - 1,j) f(i−1,j),这两个取 M a x Max Max就得到上一步的最大值,然后再加上本格的花生数量就行了。得出以下的状态转移方程
f ( i , j ) = max ( f ( i , j − 1 ) , f ( i − 1 , j ) ) f\left(i,j\right)\ =\ \max\left(f\left(i,j-1\right),f\left(i-1,j\right)\right) f(i,j) = max(f(i,j−1),f(i−1,j)),得出代码
#include <bits/stdc++.h>using namespace std;const int N = 1010;
int f[N][N], t;int read() {int x = 0, f = 1; char c = getchar();for(; !isdigit(c); c = getchar()) f = (c == '-') ? -1 : 1;for(; isdigit(c); c = getchar()) x = x * 10 + c - 48;return x * f;
}int main()
{t = read();while (t -- ){int n = read(), m = read();for(int i = 1; i <= n; i ++ )for(int j = 1; j <= m; j ++ )f[i][j] = max(f[i - 1][j], f[i][j - 1]) + read();printf("%d\n", f[n][m]);}return 0;
}
这个在提高课中被分到了“数字三角形模型”,那他和数字三角形的相似处在哪里?
都是线性dp,都是从两个地方转移过来,甚至状态转移方程完全一样(循环不一样),所以要举一反三,融会贯通。
AcWing1015.摘花生相关推荐
- 1284:摘花生《信息学奥赛一本通》
/* 1284:摘花生<信息学奥赛一本通> http://ybt.ssoier.cn:8088/problem_show.php?pid=1284 */ #include <ios ...
- 2728:摘花生(数字金子塔变形)
2728:摘花生 查看 提交 统计 提问 总时间限制: 1000ms 内存限制: 65536kB 描述 Hello Kitty 想摘点花生送给她喜欢的米老鼠.她来到一片有网格状道路的矩形花生地(如下图 ...
- AcWing 1015. 摘花生 (DP)
1015. 摘花生 思路 状态表示:dp[i][j]表示从(1, 1)走到(i, j)的所有路线中权值最大的那条路线 状态计算(集合划分):从(1, 1)走到(i, j)的所有路线集合划分为下面两类 ...
- Bailian2950 摘花生【贪心】
2950:摘花生 总时间限制: 1000ms 内存限制: 65536kB 描述 鲁宾逊先生有一只宠物猴,名叫多多.这天,他们两个正沿着乡间小路散步,突然发现路边的告示牌上贴着一张小小的纸条:" ...
- 寒假每日一题题解(1.29)摘花生(DP水题)
摘花生 Hello Kitty想摘点花生送给她喜欢的米老鼠. 她来到一片有网格状道路的矩形花生地(如下图),从西北角进去,东南角出来. 地里每个道路的交叉点上都有种着一株花生苗,上面有若干颗花生,经过 ...
- 鲁滨逊摘花生NOIP2004
总时间限制: 1000ms 内存限制: 65536kB 描述 鲁宾逊先生有一只宠物猴,名叫多多.这天,他们两个正沿着乡间小路散步,突然发现路边的告示牌上贴着一张小小的纸条:"欢迎免费品尝我种 ...
- 2022.1.29 训练日记 6 AcWing 1015. 摘花生
题目链接:摘花生 题目分析: 0.该题是一道线性DP(数字三角形模型). 1.状态表示集合:定义f[i][j]为从(1, 1)到达(i, j)的所有方案属性:最大值 2.状态转移(i, j)从(i-1 ...
- AcWing 1015. 摘花生
Hello Kitty想摘点花生送给她喜欢的米老鼠. 她来到一片有网格状道路的矩形花生地(如下图),从西北角进去,东南角出来. 地里每个道路的交叉点上都有种着一株花生苗,上面有若干颗花生,经过一株花生 ...
- 摘花生(信息学奥赛一本通-T1284)
[题目描述] Hello Kitty想摘点花生送给她喜欢的米老鼠.她来到一片有网格状道路的矩形花生地(如下图),从西北角进去,东南角出来.地里每个道路的交叉点上都有种着一株花生苗,上面有若干颗花生,经 ...
最新文章
- C#调用C++DLL的小总结8---C++Dll中函数返回字符串指针
- UVA12633 Super Rooks on Chessboard
- nginx 403 Forbidden
- sql server版本 性能_迁移到高版本 SQL 数据库后,性能变差了
- 个人管理 - Learn More,Study Less!
- 用数据说话,基金经理一年到底能挣多少钱?
- java五子棋人机对战_实现简单的人机对战五子棋(实践)
- VMware虚拟机(Ubuntu)添加物理串口
- 字符多维php递归遍历目录
- jQuery EasyUI/TopJUI输入框事件监听
- 一篇文章告诉你什么是社群运营
- 常见十大算法 冒泡算法
- 一次spinlock死锁故障的定位(太经典,收藏!)
- 控制面板设置java_win10系统打开java控制面板的具体技巧
- ECSHOP和SHOPEX快递单号查询中通插件V8.6专版
- 如何使用OBS开启直播
- 地铁怎么坐才不能做反_地铁怎么坐,地铁怎么坐才不能做反
- 关于Excel自动换行,不会在西文单词中间换行的问题
- 基于mplayer的简易影音播放器
- 精通脚本黑客读书笔记(一)