dp数字三角形 (走一次) 摘花生
作者:
啦啦啦123
,
2021-04-23 23:32:11
,
所有人可见
,
阅读 354
链接:
https://www.acwing.com/problem/content/1017/
题目分析:
f[i][j] 的含义是从[1][1]到[i][j]的花生数。
当前结点可以由上一步 向右走到达f[i][j - 1] 右走一步到达 或者 向下走到达f[i - 1][j] 下走一步到达。
f[i][j] = max(f[i][j - 1] + w[i][j] , f[i - 1][j] + w[i][j]);
代码:
# include <iostream>
# include <cstring>
using namespace std;
const int N = 110;
int a[N][N];
int f[N][N];
int t;
int main()
{
scanf("%d",&t);
while(t--)
{
memset(f,0,sizeof f);
int r,c;
scanf("%d %d",&r,&c);
for(int i = 1 ; i <= r ; i++)
{
for(int j = 1 ; j <= c; j ++)
{
scanf("%d",&a[i][j]);
}
}
for(int i = 1 ; i <= r ; i++)
{
for(int j = 1 ; j <= c ; j++)
{
f[i][j] = max(f[i][j],f[i - 1][j] + a[i][j]);
f[i][j] = max(f[i][j],f[i][j - 1] + a[i][j]);
}
}
printf("%d\n",f[r][c]);
}
return 0;
}