两次二维dp水过了???
查看原帖
两次二维dp水过了???
829895
Linglo楼主2023/11/10 20:41
#include <iostream>
using namespace std;

int arr[10][10];
int dp[10][10];
int dp1[10][10];
int main(){
    int n;
    cin>>n;
    int a,b,c;
    scanf("%d %d %d",&a,&b,&c);
    while(a!=0||b!=0||c!=0){
        arr[a][b]=c;
        scanf("%d %d %d",&a,&b,&c);
    }
    for(int i = 1;i <= n;i ++){
        for(int j = 1;j <= n;j ++){
            dp[i][j] = max(dp[i-1][j]+arr[i][j],dp[i][j-1]+arr[i][j]);
        }
    }
    int t = dp[n][n];
    for(int i = 1;i <= n;i ++){
        for(int j = 1;j <= n;j ++){
            if(dp[i][j]==t&&dp[i][j]!=0){
                t -= arr[i][j];
                arr[i][j] = 0;
                i = 0;
                j = 0;
            }
        }
    }
    for(int i = 1;i <= n;i ++){
        for(int j = 1;j <= n;j ++){
            dp1[i][j] = max(dp1[i-1][j]+arr[i][j],dp1[i][j-1]+arr[i][j]);
        }
    }
    cout<<dp[n][n]+dp1[n][n];

    return 0;
}
2023/11/10 20:41
加载中...