简单的数塔,用记忆化搜索或者递推都可以。
/*Accepted 260K 16MS C++ 601B 2012-04-11 10:12:15 */ #include<cstring> #include<cstdlib> #include<cstdio> #define MAXN 105 #define max(a, b) ( a > b ? a : b) int d[MAXN][MAXN], a[MAXN][MAXN]; int n; void init() { for( int i = 1; i <= n; i ++) for( int j = 1; j <= i ; j ++) scanf( "%d", &a[i][j]); memset( d, -1, sizeof d); } int dfs( int i, int j) { int &ans = d[i][j]; if( ans != -1) return ans; if( i == n) return ans = a[i][j]; return ans = a[i][j] + max( dfs( i + 1, j), dfs( i + 1, j + 1) ); } int main() { while( scanf( "%d", &n) == 1) { init(); printf( "%d\n", dfs(1, 1)); } return 0; }