【洛谷习题】Likecloud-吃、吃、吃

题目链接:https://www.luogu.org/problemnew/show/P1508


好迷的一道题啊,一开始题意没理解,原来起点是最后一行的下方,而不是在最后一行上。555,为什么顺推不行,难道是细节问题(需要处理边界)?好吧,我比较懒,改成倒推就对了,以后看哪个简单就用哪个吧。呃呃,其实这道题和数字三角形很相似,不过每次需要考虑三个方向。

 1 #include<cstdio>
 2 #include<cstring>
 3 const int mmax=205,inf=0x3f3f3f3f;
 4 int m,n,dp[mmax][mmax],ans;
 5 inline int max(int a,int b) {
 6     return a>b?a:b;
 7 }
 8 int main() {
 9     scanf("%d%d",&m,&n);
10     memset(dp,-inf,sizeof(dp));
11     for(int i=1;i<=m;++i)
12         for(int j=1;j<=n;++j) scanf("%d",&dp[i][j]);
13     for(int i=2;i<=m;++i)
14         for(int j=1;j<=n;++j) {
15             int mm=max(dp[i-1][j-1],max(dp[i-1][j],dp[i-1][j+1]));
16             dp[i][j]+=mm;
17         }
18     ans=max(dp[m][n/2],max(dp[m][n/2+1],dp[m][n/2+2]));
19     printf("%d",ans);
20     return 0;
21 }
AC代码

猜你喜欢

转载自www.cnblogs.com/Mr94Kevin/p/9613261.html