方格取数:
#include <iostream> #include <algorithm> const int N = 12; int f[N*2][N][N], a[N][N];//注意这里f数组的第一维的大小应该为2*N,因为表示的是走到的方格行+列 using namespace std; int main() { int n; cin>>n; int r, l, x; while(cin>>r>>l>>x, r || l || x) a[r][l] = x; for(int k = 2; k <= n + 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 = a[i1][j1]; if(i1 != i2) t += a[i2][j2]; int &x = f[k][i1][i2]; x = max(x, f[k - 1][i1-1][i2-1] + t); x = max(x, f[k - 1][i1][i2-1] + t); x = max(x, f[k - 1][i1-1][i2] + t); x = max(x, f[k - 1][i1][i2] + t); } } cout<<f[2*n][n][n]<<endl; }