搞了给完整的四维dp,然后就过了样例和1个数据
救命啊!!!!!!!!
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n,xin,yin,val,bas;
int map[9][9]={0};
int dp[17][9][9];
cin>>n;
while(1)
{
cin>>xin>>yin>>val;
if(xin==0&&yin==0&&val==0) break;
else map[xin][yin]=val;
}
dp[0][0][0]=map[0][0];
for(int i=1;i<2*n-1;i++)
{
for(int j=max(0,i-n+1);j<=min(i,n-1);j++)
{
for(int k=max(0,i-n+1);k<=min(i,n-1);k++)
{
if(j==k) bas=map[j][i-j];
else bas=map[j][i-j]+map[k][i-k];
if(j!=0&&k!=0&&j!=i&&k!=i) dp[i][j][k]=bas+max(max(dp[i-1][j-1][k-1],dp[i-1][j][k-1]),max(dp[i-1][j-1][k],dp[i-1][j][k]));
else if(j==0)
{
if(k==0) dp[i][j][k]=bas+dp[i-1][j][k];
else if(k==i) dp[i][j][k]=bas+dp[i-1][j][k-1];
else dp[i][j][k]=bas+max(dp[i-1][j][k-1],dp[i-1][j][k]);
}
else if(k==0)
{
if(j==i) dp[i][j][k]=bas+dp[i-1][j-1][k];
else dp[i][j][k]=bas+max(dp[i-1][j-1][k],dp[i-1][j][k]);
}
else if(j==i)
{
if(k==0) dp[i][j][k]=bas+dp[i-1][j-1][k];
else if(k==i) dp[i][j][k]=bas+dp[i-1][j-1][k-1];
else dp[i][j][k]=bas+max(dp[i-1][j-1][k-1],dp[i-1][j-1][k]);
}
else if(k==i)
{
if(j==0) dp[i][j][k]=bas+dp[i-1][j][k-1];
else dp[i][j][k]=bas+max(dp[i-1][j][k-1],dp[i-1][j-1][k-1]);
}
}
}
}
cout<<dp[n*2-2][n-1][n-1];
return 0;
}