题意:和数塔一样,求最大值。
题解:
#include <iostream> using namespace std; #define N 355 int dp[N][N], num[N][N]; int max ( int a, int b ) { return a > b ? a : b; } int main() { int n, i, j; //freopen("a.txt","r",stdin); scanf("%d",&n); for ( i = 1; i <= n; i++ ) for ( j = 1; j <= i; j++ ) scanf("%d",&num[i][j]); memset(dp,0,sizeof(dp)); for ( i = 1; i <= n; i++ ) dp[n][i] = num[n][i]; for ( i = n-1; i >= 1; i-- ) { for ( j = 1; j <= i; j++ ) dp[i][j] = max ( dp[i+1][j], dp[i+1][j+1] ) + num[i][j]; } printf("%d\n",dp[1][1]); return 0; }