数塔问题c++

题目描述

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

输入

输入数据首先包括一个整数整数N(1 <= N <= 100),表示数塔的高度,接下来用N行数字表示数塔,其中第i行有个i个整数,且所有的整数均在区间[0,99]内。

输出

从底层走到顶层经过的数字的最大和是多少?

样例输入

5
7
3 8
8 1 0
2 7 4 4
4 5 2 6 5

样例输出

30

知识点:动态规划

代码如下:

#include<bits/stdc++.h>
using namespace std;
long long a[101][101],b[101][101];//a为初始数组,b为答案数组
int main(){
    long long n;
    cin>>n;
    for(int i=1;i<=n;i++){
    	for(int j=1;j<=i;j++){
    		cin>>a[i][j];
		}
	}
	for(int i=1;i<=n;i++){
		b[n][i]=a[n][i];//最下面只有一种可能性,直接等于
	}
	for(int i=n-1;i>=1;i--){
    	for(int j=1;j<=i;j++){
    		b[i][j]=a[i][j]+max(b[i+1][j],b[i+1][j+1]);//动态转移方程
//走到第i行第j列的数 = 第i行第j列的数 + 走到第i+1行第j列的数 和 走到第i+1行第j+1列的数 的最大值
		}
	}
	cout<<b[1][1];//输出走到最顶端的数(答案)
    return 0;
}

相关推荐

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-22 06:10:01       52 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-22 06:10:01       54 阅读
  3. 在Django里面运行非项目文件

    2024-07-22 06:10:01       45 阅读
  4. Python语言-面向对象

    2024-07-22 06:10:01       55 阅读

热门阅读

  1. python多进程库(multiprocessing)

    2024-07-22 06:10:01       17 阅读
  2. python每日学习9:正则表达式

    2024-07-22 06:10:01       19 阅读
  3. Linux

    Linux

    2024-07-22 06:10:01      17 阅读