用的两个dp数组
#include<iostream>
using namespace std;
typedef long long LL;
LL N,arr[11][11],dp1[11][11],dp2[11][11];
int main(){
cin>>N;
LL a,b,c;
while(cin>>a>>b>>c)
{
if(!a&&!b&&!c)break;
arr[a][b]=c;
dp1[a][b]=c;
dp2[a][b]=c;
}
for(LL i=1;i<=N;i++)
{
for(LL j=1;j<=N;j++)
{
dp1[i][j]=max(dp1[i-1][j],dp1[i][j-1])+dp1[i][j];
}
}
LL z1,z2;
z1=dp1[N][N];
LL x=N,y=N;
dp2[N][N]=0;
dp2[1][1]=0;
while(x>1||y>1)
{
if(dp1[x][y]-arr[x][y]==dp1[x][y-1])
{
dp2[x][y-1]=0;
y-=1;
}
else{
dp2[x-1][y]=0;
x-=1;
}
}
for(int i=1;i<=N;i++)
{
for(int j=1;j<=N;j++)
{
dp2[i][j]=max(dp2[i-1][j],dp2[i][j-1])+dp2[i][j];
}
}
z2=dp2[N][N];
cout<<z1+z2<<endl;
return 0;
}