这题我们用动态规划写
上代码:
//摘花生
#include <iostream>
using namespace std;
int main() {
int T;
scanf ("%d", &T);
while (T --) {
int n, m;
scanf ("%d %d", &n, &m);
int a[150][150] = {0}, dp[150][150] = {0};
for (int i = 1; i <= n; i ++)
for (int j = 1; j <= m; j ++)
scanf ("%d", &a[i][j]);
/*
状态设置
dp[i][j] 从(1, 1)到(i, j)的MAX
状态转移
dp[i][j] = max(dp[i - 1][j], dp[i][j - 1]) + a[i][j];
初始化 无
输出
cout << dp[n][m];
*/
for (int i = 1; i <= n; i ++)
for (int j = 1; j <= m; j ++)
dp[i][j] = max(dp[i - 1][j], dp[i][j - 1]) + a[i][j];
printf ("%d\n", dp[n][m]);
// for (int i = 0; i <= n; i ++) {
// for (int j = 0; j <= m; j ++)
// printf ("%d ", dp[i][j]);
// puts("");
// }
}
return 0;
}
/*
【输入样例】
2
2 2
1 1
3 4
2 3
2 3 4
1 6 5
【输出样例】
8
16
*/