同一个代码三个途径出了三个答案,本地复制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;
}