您的位置:首页 > 其它

HDOJ 2084 数塔 【dp】

2015-08-19 21:44 375 查看

HDOJ 2084 数塔 【dp】




状态是从当前位置出发的最大和

转移方程是当前的数值 加上下面两个方向的位置开始的最大和

即dp[i][j] = a[i][j] + max(dp[i+1][j], dp[i+1][j+1]);



#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
using namespace std;
#define clr(c) memset(c, 0, sizeof(c));
const int MAXL = 105;
int C, N;
int a[MAXL][MAXL];
int dp[MAXL][MAXL];

void Resolve(){
clr(dp);
for(int j = 1; j <= N; j++) dp
[j] = a
[j];
for(int i = N-1; i >= 1; i--){
for(int j = 1; j <= i; j++){
dp[i][j] = a[i][j] + max(dp[i+1][j], dp[i+1][j+1]);
}
}
//    for(int i = 1; i <= N; i++){
//        for(int j = 1; j <= i; j++){
//            printf("%d  ", dp[i][j]);
//        }
//        printf("\n");
//    }
}

int main(){
clr(a);
scanf("%d", &C);
while(C--){
scanf("%d", &N);
for(int i = 1; i <= N; i++){
for(int j = 1; j <= i; j++){
scanf("%d", &a[i][j]);
}
}
Resolve();
printf("%d\n", dp[1][1]);
}

return 0;
}


版权声明:本文为博主原创文章,未经博主允许不得转载。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: