改了一下
```
#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