#include<bits/stdc++.h>
using namespace std;
int n,dp[15][15],d[15][15],z[15][15],x[15][15];
int mmap[15][15],ans,ans1,ans2,ans3;
int main()
{
cin>>n;
int a,b,c;
while(scanf("%d %d %d",&a,&b,&c))
{
if(a==0&&b==0&&c==0){
break;
}
mmap[a][b]=c;
d[a][b]=c;
z[a][b]=c;
}
//第一步:两次dp找最大值
for(int i=n;i>=1;i--)
{
for(int j=n;j>=1;j--){
dp[i][j]=max(dp[i+1][j],dp[i][j+1])+mmap[i][j];
if(dp[i][j]>ans)
{
d[i][j]=0;
}
ans=max(ans,dp[i][j]);
//cout<<ans<<" ";
}
//cout<<endl;
}
//cout<<endl<<endl;
//
//
//
//d[5][2]=0;
//d[6][3]=0;
memset(dp,0,sizeof(dp));
for(int i=n;i>=1;i--)
{
for(int j=n;j>=1;j--){
int now=dp[i][j];
dp[i][j]=max(dp[i+1][j],dp[i][j+1])+d[i][j];
ans1=dp[i][j];
//cout<<ans1<<" ";
}
//cout<<endl;
}
//cout<<endl;
//第二步:一次简单遍历 ,一次dp找最大值
int k=n;
int sum=0;
memset(dp,0,sizeof(dp));
for(int i=n;i>=1;i--){
for(int j=k;j>=1;j--){
sum+=z[j][i];
if(sum>ans2)
{
z[j][i]=0;
k=j;
}
ans2=sum;
//cout<<ans2<<" ";
}
//cout<<endl;
}
memset(dp,0,sizeof(dp));
for(int i=n;i>=1;i--)
{
for(int j=n;j>=1;j--){
int now=dp[i][j];
dp[i][j]=max(dp[i+1][j],dp[i][j+1])+z[i][j];
ans3=max(ans3,dp[i][j]);
// cout<<ans3<<" ";
}
// cout<<endl;
}
//二者比较得最大值
if(ans+ans1>ans2+ans3) cout<<ans+ans1<<endl;
else cout<<ans2+ans3;
return 0;
}
但我觉得这种写法不符合题意,但又举不出反例=-=