IT民工
加油!

简单的数塔,用记忆化搜索或者递推都可以。

 

/*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;
}

 

 

 

posted on 2012-04-11 10:14  找回失去的  阅读(160)  评论(0编辑  收藏  举报