LeeBlog

导航

HDU 2084 数塔 简单DP

这题是一水题,只需从第一层一直往下面找子树中较大的那一个就可以了,很快水了,不过用codeblocks编得郁闷,codeblocks上编译都过不了,直接提交就水了

#include<stdio.h>
int n,inf = 0x7fffffff,des[10000],num[10000];
int cal( int sum,int i,int j )
{

    if( num[sum + j] == inf )
        return 0;
    if( des[sum + j] )
        return num[sum + j];
    des[sum + j] = 1;
    if( j > i )
    {
        sum += i;
        ++i;
        j = 1;
    }
    return num[sum + j] += ( cal(sum + i,i + 1, j) > cal(sum + i,i + 1,j + 1) ? cal(sum + i,i + 1, j) :cal(sum + i,i + 1,j + 1));
}
int main( )
{
    int t;
    scanf( "%d",&t );
    while( t-- )
    {
        scanf( "%d",&n );
        for( int i = 0; i <= 6000; ++i )
            num[i] = inf,des[i] = 0;
        for( int i = 1,sum = 0; i <= n; sum += i,++i )
            for( int j = 1; j <= i; ++j )
                scanf( "%d",&num[j+sum] );
        int res = cal( 0,1,1 );
        printf( "%d\n",res );
    }
    return 0;
}

posted on 2011-04-17 21:58  LeeBlog  阅读(187)  评论(0编辑  收藏  举报