朴素做法
f[i][j] 里面存的是从1,1到该点的最大价值(能捡多少花生)
因为最后一点f[i][j]是固定的,所以我们找前一点,前一点有两个位置 一个是从上边来,一个是从左边来,这两边取最大值 再加上i,j点的价值,即为f[i][j]的值
#include <iostream>
#include <algorithm>
using namespace std;
const int N = 110;
int r, c;
int a[N][N], f[N][N]; //一个存花生,一个存答案
int main()
{
int t;
cin >> t; //多组数据测试
while(t--)
{
cin >> r >> c;
for(int i = 1; i <= r; i ++)
for(int j = 1; j <= c; j ++)
cin >> a[i][j];
for(int i = 1; i <= r; i ++)
for(int j = 1; j <= c; j ++)
f[i][j] = max(f[i - 1][j], f[i][j - 1]) + a[i][j];
//从上边来 或 从下面来的最大值 加上ij的花生值
cout << f[r][c] << endl;
}
return 0;
}