HDOJ.2084 数塔(DP)

数塔

点我挑战题目

题意分析

DP的思想,自上而下计算。
[这几天比较忙 有空补上]

代码总览

/*
    Title:HDOJ.2084
    Author:pengwill
    Date:2017-1-14
*/
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#define ma 101
using namespace std;
int map[ma][ma];
int dp[ma][ma];
void get(int n)
{
    int i,j;
    for(i = 0;i<n;i++){
        for(j = 0; j<=i;j++){
            if(!i&&!j){
                dp[i][j] = map[i][j];
            }else if(!j){
                dp[i][j] = dp[i-1][j] + map[i][j];
            }else if(j == i){
                dp[i][j] = dp[i-1][j-1] + map[i][j];
            }else{
                dp[i][j] = max(dp[i-1][j] + map[i][j],dp[i-1][j-1] + map[i][j]);
            }
        }
    }
}

int main()
{
    int n,t;
    scanf("%d",&t);
    while(t--){
        scanf("%d",&n);
        int i,j;
        for(i = 0;i<n;i++){
            for(j = 0; j<=i;j++){
                scanf("%d",&map[i][j]);
            }
        }
        get(n);
        int max = 0;
        for(i = 0;i<n;i++){
            if(max<dp[n-1][i]){
                max = dp[n-1][i];
            }
        }
        printf("%d\n",max);
    }
    return 0;
}

posted @ 2017-01-14 22:12  pengwill  阅读(104)  评论(0编辑  收藏  举报