首先,a数组最外层一圈应该填成-INF。
其次,最终结果应该是dp[m][n / 2] , dp[m][n / 2 + 1] , dp[m][n / 2 + 2]中的最大值。
最后,第15行为什么要倒序填表?
```cpp
#include <bits/stdc++.h>
using namespace std;
int m,n,maxx;
int a[1001][1001];
int dp[1001][1001];
int main()
{
scanf("%d %d",&m,&n);
for (int i = 0 ; i <= m + 1 ; i++) {
for (int j = 0 ; j <= n + 1 ; j++) {
a[i][j] = -1e9;
}
}
for (int i = 1 ; i <= m ; i++)
for(int j=1;j<=n;j++)
scanf("%d",&a[i][j]);
for(int i=1;i<=m + 1;i++)
for(int j=1;j<=n;j++)
dp[i][j]=max(dp[i-1][j],max(dp[i-1][j-1],dp[i-1][j+1]))+a[i][j];
maxx = max (dp[m][n / 2] , max (dp[m][n / 2 + 1] , dp[m][n / 2 + 2]));
printf("%d\n",maxx);
return 0;
}
```
by whc2020 @ 2020-01-05 16:12:55
这样应该就能过了。
@[wangsixian2007](/user/263469)
by whc2020 @ 2020-01-05 16:13:27
只要把最外圈全部填成-INF再把出发点填为0就应该能AC了。
by Cici_ovo @ 2020-01-30 22:02:22