90分求助
查看原帖
90分求助
744562
Aya_tt楼主2022/10/2 16:53

调好几天了,我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;
}
2022/10/2 16:53
加载中...