其他分享
首页 > 其他分享> > HDU 2084 数塔

HDU 2084 数塔

作者:互联网

链接

数塔 - http://acm.hdu.edu.cn/showproblem.php?pid=2084
在这里插入图片描述

分析

2 19 7 18 10 10 4 5 16 10 6 8 12 15 9 19 2 7 18 10 10 4 5 16 10 6 8 12 15 9

代码

从哪里来?【自顶而下】

#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define MXN 110
int n, dp[MXN][MXN];
int main(){
    int T;
	cin >> T;
    while(T--){		
        scanf("%d", &n);
		for(int i = 1; i <= n; ++i){
			for(int j = 1; j <= i; ++j){
				scanf("%d", dp[i]+j);
			}
		}
		for(int i = n-1; i >= 1; --i) {
			for(int j = 1; j <= i; ++j){
				dp[i][j] += max(dp[i+1][j], dp[i+1][j+1]);
			}
		}
		printf("%d\n", dp[1][1]);
    }
    return 0;
}

到哪里去?【自顶而下】

#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define MXN 110
int n, d[MXN][MXN], dp[MXN][MXN];
int main(){
    int T;
	cin >> T;
    while(T--){		
        scanf("%d", &n);
		for(int i = 1; i <= n; ++i){
			for(int j = 1; j <= i; ++j){
				scanf("%d", d[i]+j);
			}
		}
		memset(dp, 0, sizeof dp);
		for(int i = 1; i <= n; ++i) dp[n][i] = d[n][i];
		for(int i = n; i > 1; --i) { // 从已知出发
			for(int j = 1; j <= i; ++j){
				dp[i-1][j] = max(dp[i-1][j], dp[i][j]+d[i-1][j]);
				dp[i-1][j-1] = max(dp[i-1][j-1], dp[i][j]+d[i-1][j-1]);
			}
		}
		printf("%d\n", dp[1][1]);
    }
    return 0;
}

标签:10,HDU,数塔,int,2084,MXN,--,long,dp
来源: https://blog.csdn.net/jpphy0/article/details/116999669