【晴问算法】入门篇—递归—数塔

题目描述

数塔就是由一堆数字组成的塔状结构,其中第一行1个数,第二行2个数,第三行3个数,依此类推。每个数都与下一层的左下与右下两个数相连接。这样从塔顶到塔底就可以有很多条路径可以走,现在需要求路径上的数字之和的最大值。
例如在上图中,5->8->12->10与5->3->16->11这两条路径上的数字之和都是35,是所有路径中的最大值。

输入描述
第一行一个正整数n(1≤n≤20),表示数塔的层数。
接下来n行为数塔从上到下的每一层,其中第层有i个正整数,每个数都不超过1000。
输出描述
从塔顶到塔底的所有路径中路径上数字之和的最大值。

样例1
输入

4

5

8 3
12 7 16
4 10 11 6


输出
35

#include <bits/stdc++.h>
using namespace std;
const int MAXN = 100;
int a[MAXN][MAXN];//二维数组
int n;
int sum_MAX(int i, int j){//树的两个分叉
	if(i == n-1){//到最底层,那么这个数塔只有一个元素a[n][j],该元素就是最大值
		return a[n-1][j];
	}else{//否则选子树上较大的数到底层距离加上自身
		return max(sum_MAX(i + 1, j),sum_MAX(i+1,j+1)) + a[i][j];
	}
	
}
int main(){
	
	cin >> n;
	for(int i=0;i<n;i++){
		for(int j=0;j<=i;j++){
			cin >> a[i][j];
		}
	}
	printf("%d",sum_MAX(0,0));//输出第一行第一列到底层的最大距离
	return 0;
}

相关推荐

  1. 算法入门—字符串处理—回文字符串

    2024-03-30 23:38:04       17 阅读
  2. 算法入门—贪心算法—最大组合整数

    2024-03-30 23:38:04       21 阅读
  3. 算法入门—数学问题—西西弗斯串

    2024-03-30 23:38:04       25 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-03-30 23:38:04       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-03-30 23:38:04       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-03-30 23:38:04       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-03-30 23:38:04       18 阅读

热门阅读

  1. Android TV 4K UI

    2024-03-30 23:38:04       15 阅读
  2. Mysql中的那些锁

    2024-03-30 23:38:04       19 阅读
  3. axios请求类型是文件流怎么显示报错信息

    2024-03-30 23:38:04       14 阅读
  4. UI 神器 - Vue3 中如何使用 element-plus

    2024-03-30 23:38:04       18 阅读
  5. Composer常见错误解决

    2024-03-30 23:38:04       22 阅读
  6. 【LeetCode热题100】20. 有效的括号(栈)

    2024-03-30 23:38:04       21 阅读
  7. 《leetcode hot100》2. 两数相加

    2024-03-30 23:38:04       17 阅读
  8. 【算法笔记】 树形DP算法总结

    2024-03-30 23:38:04       23 阅读
  9. Linux中定时任务的配置及注意事项

    2024-03-30 23:38:04       15 阅读