X-man

导航

hdu 2084 数塔 (DP初步)

#include<stdio.h>
int main()
{
    int n,m;
    int a[150][150];
    scanf("%d",&n);
    while(n--)
    {
        scanf("%d",&m);
        for(int i=1;i<=m;i++)
            for(int j=0;j<i;j++)
                scanf("%d",&a[i-1][j]);
        for(int i=m;i>1;i--)
        for(int j=0;j<i-1;j++)
        {
            if(a[i-1][j]>a[i-1][j+1])a[i-2][j]+=a[i-1][j];
            else a[i-2][j]+=a[i-1][j+1];
        }
        printf("%d\n",a[0][0]);

    }
    return 0;
}

解题思路

          求经过的结点的最大和,从最后一层看起。

          将倒数第二层的各个元素加上下层中两边的结点较大者

          然后一层一层往上加,直至最后一层。

          输出塔顶元素,即为解。

posted on 2013-04-06 19:32  雨钝风轻  阅读(272)  评论(0编辑  收藏  举报