1: // problem : 方格取数
2: // data : 4.18
3: #include <iostream>
4: #include <cstring>
5: using namespace std;
6: int f[25][11][11],map[11][11];
7: int main()
8: {
9: int n,a,c,b;
10: memset(map,0,sizeof(map));
11: cin>>n;
12: while(cin>>a>>b>>c && a+b+c)
13: {
14: map[a][b] = c;
15: }
16: memset(f,0,sizeof(f));
17: f[1][1][1] = map[1][1]; // di yi jie duan jiu yi ge
18: for(int i=2;i<=2*n-1;i++) // jie duan
19: {
20: for(int j=1;j<=n;j++) // zhuang tai [x,y] -> x = j && y = i+1-j
21: {
22: for(int k=1;k<=n;k++) // zhuang tai
23: {
24: if(i+1-j>0 && i+1-k>0)
25: {
26: f[i][j][k] = max(f[i-1][j-1][k],max(f[i-1][j-1][k-1],max(f[i-1][j][k-1],f[i-1][j][k]))); // si zhong jue ce neng dao da (j , k) zhe ge zhuang tai
27: if(j == k)
28: f[i][j][k] = f[i][j][k] + map[j][i+1-j];
29: else
30: f[i][j][k] = f[i][j][k] + map[j][i+1-j] + map[k][i+1-k];
31: }
32: }
33: }
34: }
35: cout<<f[n*2-1][n][n]<<endl;
36: return 0;
37: }
38: /*
39: PS : 阶段-->状态-->决策
40: */