正经题解|数塔升级版2
2024-03-22 13:41:36
发布于:浙江
15阅读
0回复
0点赞
从上到下走,(i,j)位置可以由(i-1,j-1),(i-1,j),(i-1,j+1)走过来,也就是选择(i-1,j-1),(i-1,j),(i-1,j+1)三个位置的最大值,状态转移方程为:,最终的答案为最后一行的正中间,正中间左边一个位置,正中间右边一个位置。
#include<iostream>
#include<cstring>
using namespace std;
const int N=205;
long long a[N][N],dp[N][N];
int main(){
int n,m;
cin>>n>>m;
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
cin>>a[i][j];
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
dp[i][j]=max(max(dp[i-1][j-1],dp[i-1][j]),dp[i-1][j+1])+a[i][j];
}
}
cout<<max(max(dp[n][m/2],dp[n][m/2+1]),dp[n][m/2+2]);
return 0;
}
这里空空如也
有帮助,赞一个