三维dp WA求助
查看原帖
三维dp WA求助
933682
Henry_Li_楼主2023/8/10 16:08

同一个代码三个途径出了三个答案,本地复制input有时是死循环有时是正确答案,逐行输入是正确答案,在洛谷上是WA,真的不知道怎么办了

#include <iostream>
using namespace std;
int maxfour(int a,int b,int c,int d){
    if(a>b&&a>c&&a>d) return a;
    if(b>c&&b>d) return b;
    if(c>d) return c;
    return d;
}
int main(){
    int grid[10][10],nums[10][10][9]={0},n;
    int xa,xb,xc;
    cin>>n;
    for(int i=0;;i++){
        cin>>xa>>xb>>xc;
        if(xa==0) break;
        grid[(xa-1)][(xb-1)]=xc;
    }
    for(int i=2*n-2;i>=0;i--){
        if(i>n-1){
            for(int j=n-1;i-j<=n-1;j--){
                for(int k=n-1;i-k<=n-1;k--){
                    nums[i-j][j][k]=grid[i-j][j]+grid[i-k][k]+maxfour(nums[i-j+1][j][k],nums[i-j][j+1][k+1],nums[i-j+1][j][k+1],nums[i-j+1][j+1][k]);
                    if(k==j) nums[i-j][j][k]-=grid[i-j][j];
                    nums[i-k][k][j]=nums[i-j][j][k];
                }
            }
        }
        else{
            for(int j=i;j>=0;j--){
                for(int k=i;k>=0;k--){
                    nums[i-j][j][k]=grid[i-j][j]+grid[i-k][k]+maxfour(nums[i-j+1][j][k],nums[i-j][j+1][k+1],nums[i-j+1][j][k+1],nums[i-j+1][j+1][k]);
                    if(k==j) nums[i-j][j][k]-=grid[i-j][j];
                    nums[i-k][k][j]=nums[i-j][j][k];
                }
            }
        }
    }
    cout<<nums[0][0][0];
    return 0;
}
2023/8/10 16:08
加载中...