2728:摘花生
- 总时间限制:
- 1000ms
- 内存限制:
- 65536kB
- 描述
- 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 #简单递推
1 //************************************* 2 //7-1 PAx: 620终端 3 // Name: 2728:摘花生 4 // Solut: D.P. 5 //************************************ 6 //#include "stdafx.h" 7 #include<bits/stdc++.h> 8 #define N 101 9 using namespace std; 10 int t, r, c; 11 int a[N*N][N]; 12 int main() 13 { 14 scanf("%d", &t); 15 while (t--) 16 { 17 memset(a, 0, sizeof(a)); 18 scanf("%d%d", &r, &c); 19 for (int i = 1; i <= r; i++) 20 { 21 for (int j = 1; j <= c; j++) 22 { 23 scanf("%d", &a[i][j]); 24 } 25 } 26 for (int i = r; i >= 1; i--) 27 { 28 for (int j = c; j >= 1; j--) 29 { 30 a[i][j] += max(a[i + 1][j], a[i][j + 1]); 31 } 32 } 33 printf("%d\n", a[1][1]); 34 } 35 return 0; 36 }
时间: 2024-11-03 05:40:26