wa的点自己下测试点测试的是对的,洛谷上交有问题
#include<bits/stdc++.h>
using namespace std;
#define int long long
int n;
int num[15][15],dp[15][15][15];
signed main(){
cin>>n;
int x,y,cnt;
while(cin>>x>>y>>cnt){
if(x==0&&y==0&&cnt==0) break;
num[x][y]=cnt;
}
dp[1][1][1]=num[1][1];
for(int i=2;i<=2*n-1;i++){
for(int j=1;j<=n;j++){
for(int k=1;k<=n;k++){
int z1,z2,z3,z4;
if(i-j<0||i-k<0) continue;
if(i-j>=1&&i-k>=1) z1=dp[i-1][j][k];
if(i-j>=0&&i-k>=0) z2=dp[i-1][j-1][k-1];
if(i-j>=1&&i-k>=0) z3=dp[i-1][j][k-1];
if(i-j>=0&&i-k>=1) z4=dp[i-1][j-1][k];
dp[i][j][k]=max(max(z1,z2),max(z3,z4))+num[i+1-j][j];
if(j!=k) dp[i][j][k]+=num[i+1-k][k];
}
}
}
cout<<dp[2*n-1][n][n];
return 0;
}
附测试点:
输入:
9
1 2 10
1 3 7
1 4 4
3 4 3
4 3 6
5 1 5
5 3 7
5 5 3
0 0 0
输出:
40