调好几天了,我dp就是个【 】。
#include<bits/stdc++.h>
using namespace std;
const int inf = 1e5 + 10;
long long n, m, dp[1010][1010][4], a[1010][1010];
int main(){
cin >> n >> m;
for(int i = 1;i <= n;i++){
for(int j = 1;j <= m;j++){
cin >> a[i][j];
dp[i][j][1] = -inf;
dp[i][j][2] = -inf;
dp[i][j][3] = -inf;
}
}
dp[1][1][1] = a[1][1];
dp[1][1][2] = a[1][1];
dp[1][1][3] = a[1][1];
for(int i = 2;i <= n;i++){
dp[i][1][3] = dp[i - 1][1][3] + a[i][1];
}
for(int i = 2;i <= m;i++){
for(int j = 1;j <= n;j++){
dp[j][i][1] = max(max(dp[j][i - 1][1],dp[j][i - 1][2]),dp[j][i - 1][3]) + a[j][i];
if(j == 1){
continue;
}
dp[j][i][3] = max(dp[j - 1][i][1],dp[j - 1][i][3]) + a[j][i];
}
for(int j = n - 1;j >= 1;j--){
dp[j][i][2] = max(dp[j + 1][i][1],dp[j + 1][i][2]) + a[j][i];
}
}
long long ans = max(dp[n][m][1],max(dp[n][m][2],dp[n][m][3]));
cout<<ans;
}