1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59
|
#include<bits/stdc++.h> using namespace std;
const int N=15;
int w[N][N]; int dp[2*N][N][N];
int n;
void work(){ cin>>n; int a, b, c; while(cin>>a>>b>>c, a||b||c) w[a][b]=c;
for(int k=2;k<=2*n;k++) for(int i1=1;i1<=n;i1++) for(int i2=1;i2<=n;i2++){ int j1=k-i1, j2=k-i2; if(j1>=1&&j1<=n&&j2>=1&&j2<=n){ int t=w[i1][k-i1]; if(i2!=i1) t+=w[i2][k-i2]; int &x=dp[k][i1][i2]; x=max(x, dp[k-1][i1][i2]+t); x=max(x, dp[k-1][i1-1][i2]+t); x=max(x, dp[k-1][i1][i2-1]+t); x=max(x, dp[k-1][i1-1][i2-1]+t); } }
cout<<dp[2*n][n][n]<<endl;
}
int main(){ work(); return 0; }
|