首页 > 其他分享 >数塔(`・ω・´)

数塔(`・ω・´)

时间:2024-02-16 16:56:02浏览次数:31  
标签:结点 总数 数字 数塔 int 经过

问题描述
从数塔的顶层出发,寻找一条从顶部到底边的路径,使得路径上所经过的数字之和最大。路径上的每一步都只能往左下或右下走。只需要求出这个最大和即可,不必给出具体路径。
三角形的行数为1-100,数字为0-99。
样例输入:
5
8
12 15
3 9 6
8 10 5 12
16 4 18 10 9

样例输出:
60

这是一个基础的DP问题,要想知道第一个结点往下走的时候是往左走还是往右走,就要判断是从左结点走经过的结点数字总数较大还是往右结点走经过的结点数字总数较大,而对于左结点,是往左结点走经过的结点数字总数较大还是往右结点走经过的结点数字总数较大,对于左结点的左结点…你懂的,这个时候就开始循环了。
就这样一直循环到倒数第二层,对于这个结点,是往左节点走好还是往右节点走好,那好办啊,直接比较这个结点的左孩子大还是又孩子大不就结了,把大的孩子数字直接加到这个节点上就得到经过这个结点的最大结点数字总数了,哈哈,这样就好办了,我们就可以逐层求上面的各个节点的最大结点总数了,一直到第一层A[1][1]的值就是经过的结点的数字之和最大是多少。
存储这个数塔我们使用二位数组,而对于任意一个结点,左孩子是dp[i+1][j]或者dp[i+1][j+1],这是我们就要判断它的经过它左孩子得到的最大结点数更大还是右孩子经过的最大结点数更大一点。必须从倒数第二层到第一层逐层判断,这样才能保证孩子中存储的是经过它的最大结点数总数,而不是它自己的结点数。
数组的一层更新完这层存储的数字就是经过该结点的最大结点总数。

点击查看代码
#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
#define ll long long
#define Elaina 0
const int N=10050;
ll m,n,f[N][N];
int main(){
	cin>>m; 
	while(m--){
		cin>>n;
		for(int i=1;i<=n;i++){
			for(int j=1;j<=i;j++){
				cin>>f[i][j];
			}
		}
		for(int i=n-1;i>0;i--){
			for(int j=1;j<=i;j++){
				f[i][j]+=max(f[i+1][j],f[i+1][j+1]);
			}
		}
		cout<<f[1][1]<<endl;
	}
	return Elaina;
}

标签:结点,总数,数字,数塔,int,经过
From: https://www.cnblogs.com/Elaina-0/p/18016904

相关文章

  • 数塔
    1258:【例9.2】数字金字塔分析1:从顶层到底层,面临n-1次决策。向左还是向下?n-1个决策构成一个从顶到底的路径。共有2n-1条路径,我们的任务是从这些路径中选一条,使得经过的数字之和最大。n-1次决策可以用长度为n-1的01串表示。我们穷举所有01串,计算每条路径的和,打擂台求最大。但是......
  • hdu2084数塔(DP)
    思路:简单的数塔DP#include<stdio.h>#include<string.h>#include<algorithm>usingnamespacestd;inta[105][105],dp[105][105];intmain(){intt,n,i,j;scanf("%d",&t);while(t--){scanf("%d",......
  • HDU 2084 数塔(动态规划入门)
    传送门中文题就不给大家翻译了(手动滑稽),反正大家都看得懂。这是一道动态规划入门的题目,只需要找出状态转移方程即可。状态方程:dp[i][j]=a[i][j]+max(dp[i+1][j],dp[i+1][j])(dp[i][j]表示从第i层第j个数开始搜能得到的最大数)代码如下:#include<cstring>#include<iostream>#include<......
  • (hdu step 3.2.7)免费馅饼(数塔变形:求所能接到馅饼的最大数)
    题目:免费馅饼TimeLimit:2000/1000MS(Java/Others)MemoryLimit:65536/32768K(Java/Others)TotalSubmission(s):1207AcceptedSubmission(s):508 ProblemDescription都说天上不会掉馅饼,但有一天gameboy正走在回家的小径上,忽然天上掉下大把大把的馅饼。......