题284.dp数字三角形模型-acwing-Q1015–摘花生
一、题目
二、题解
本题按dp五步法分析如下:
1.确定dp数组,明确含义:dp[i][j]表示从左上角走到右下角(i,j)位置时可摘到的最大花生数目
2.确定递推公式:采用y式dp分析法
由上图可知,公式为:dp[i][j]=max(dp[i-1,j]+w[i,j],dp[i][j-1]+w[i][j])
3.初始化dp数组:显然都初始化为0就好
4.确定遍历顺序:需要用靠近左上角的数据去求出后面的数据所以显然是i:1->R,j:1->C遍历
5.打印dp数组
#include <bits/stdc++.h>
using namespace std;
const int maxn=110;
int m[maxn][maxn];
int dp[maxn][maxn];
int main()
{
int T;
cin>>T;
while(T--)
{
fill(m[0],m[0]+maxn*maxn,0);
fill(dp[0],dp[0]+maxn*maxn,0);
int R,C;
cin>>R>>C;
for(int i=1;i<=R;i++)
{
for(int j=1;j<=C;j++)
{
cin>>m[i][j];
}
}
for(int i=1;i<=R;i++)
{
for(int j=1;j<=C;j++)
{
dp[i][j]=max(dp[i-1][j]+m[i][j],dp[i][j-1]+m[i][j]);
}
}
cout<<dp[R][C]<<endl;
}
}