POJ 1163 The Triangle

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

 

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

}

 

 

 

你可能感兴趣的:(poj)