摘花生
2015-08-09 14:56
253 查看
摘花生
描述 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
代码:
#include <iostream> using namespace std; int main() { int t, a, b; int acre[105][105], ans[105][105]; cin>>t; while(t--) { cin>>a>>b; for(int i=0; i<a; i++) for(int j=0; j<b; j++) cin>>acre[i][j]; for(int i=0; i<a; i++) for(int j=0; j<b; j++) { if(i==0 && j==0) ans[i][j] = acre[0][0]; else if(i==0 && j>0) ans[i][j] = ans[i][j-1]+acre[i][j]; else if(j==0) ans[i][j] = ans[i-1][j]+acre[i][j]; else ans[i][j] = max(ans[i-1][j], ans[i][j-1])+acre[i][j]; } cout<<ans[a-1][b-1]<<endl; } return 0; }
相关文章推荐
- VS中添加新项 数据选项卡下没有ADO.NET实体数据模型解决方案
- UISlider(滑块控件)
- 设计模式之工厂模式
- 压缩包Mysql的安装以及卸载的简单方法
- Android应用:SurfaceView中添加控件
- 重复子串问题(二):求一个字符串中连续出现次数最多的子字符串
- Windows系统常用修复命令 无须重装系统
- 最小公倍数 1108
- Visual Studio 智能提示功能消失解决办法
- Android Studio入门到精通
- 使用genymotion开发Android配置
- 排序专题之选择排序
- Android ANR
- Arduino:L298N模块使用
- UIView
- 超过lua上帝的语言
- Visual Studio 智能提示功能消失解决办法
- 第21章 动态链接库和钩子(2)
- 1106 排序(类似求和求到手软)
- 国内大型的内部 C# 编程规范