AcWing 1015. 摘花生(寒假每日一题)题目链接
思路
分为两种状态,计算最优解
AC代码
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
const int N = 110;
//思路:最终的f[n,m]分为两种状态
//分别是从左边趋近时:f[n,m-1]+w[n,m];
//上边:f[n-1,m]+w[n,m]
//每一种状态f[n,m]所存的都是当前可以存的最大和
int main()
{
int T, n, m;
int f[N][N], w[N][N];
cin >> T;
while(T--){
cin >> n >> m;
for(int i=1; i<=n; i++)
for(int j=1; j<=m; j++)
cin >> w[i][j];
for(int i=1; i<=n; i++)
for(int j=1; j<=m; j++)
f[i][j] = max(f[i][j-1], f[i-1][j]) + w[i][j];
cout << f[n][m] << endl;
}
return 0;
}