倒着搜的,为什么有问题呢??求助!!

P1508 Likecloud-吃、吃、吃

改了一下 ``` #include<bits/stdc++.h> using namespace std; const int M=200; int n,m; int dp[M][M],a[M][M];//dp[i][j]代表在f[i][j]的最大能量 //dp[i][j]=max(dp[i][j],dp[i+1][j]+a[i][j]) //dp[i][j]=max(dp[i][j],dp[i+1][j+1]+a[i][j]) //dp[i][j]=max(dp[i][j],dp[i+1][j-1]+a[i][j]) int main() { memset(dp,0xc0,sizeof(dp)); scanf("%d%d",&m,&n); for(int i=1;i<=m;i++) for(int j=1;j<=n;j++) scanf("%d",&a[i][j]); int mid=(n>>1)+1; dp[m][mid-1]=a[m][mid-1],dp[m][mid]=a[m][mid],dp[m][mid+1]=a[m][mid+1]; for(int i=m;i>=1;i--){ for(int j=1;j<=n;j++){ dp[i-1][j]=max(dp[i-1][j],dp[i][j]+a[i-1][j]); dp[i-1][j+1]=max(dp[i-1][j+1],dp[i][j]+a[i-1][j+1]); dp[i-1][j-1]=max(dp[i-1][j-1],dp[i][j]+a[i-1][j-1]); } } int r=mid-m,l=mid+m,maxn=0; if(r<1) r=1; if(l>n) l=n; for(int i=r;i<=l;i++) maxn=max(maxn,dp[1][i]); printf("%d",maxn); return 0; } ```
by 圣堂之地 @ 2019-08-04 21:35:24


|