HDU2084-数塔

描述:

  在讲述DP算法的时候,一个经典的例子就是数塔问题,它是这样描述的:

  有如下所示的数塔,要求从顶层走到底层,若每一步只能走到相邻的结点,则经过的结点的数字之和最大是多少?

代码:

  简单的动态规划。

#include<stdio.h>
#include<string.h>
#include<iostream>
#include<stdlib.h>
#include <math.h>
#define N 105
using namespace std;
int height,tree[N][N],dp[N][N];

int main(){
    int testcase;
    scanf("%d",&testcase);
    while ( testcase-- ){
        scanf("%d",&height);
        memset(dp,0,sizeof(dp));
        for( int i=0;i<height;i++ ){
            for( int j=0;j<i+1;j++ ){
                scanf("%d",&tree[i][j]);
            }
        }
        for( int i=height-1;i>=0;i-- ){
            for( int j=0;j<i+1;j++ ){
                dp[i][j]=tree[i][j]+max(dp[i+1][j],dp[i+1][j+1]);
            }
        }
        printf("%d\n",dp[0][0]);
    }
    system("pause");
    return 0;
}
posted @ 2015-08-09 23:46  Lucio.Yang  阅读(231)  评论(0编辑  收藏  举报