经典算法题:数字三角形寻找最大路径

数字三角形最大路径 问题描述 7 3 8 8 1 0 2 7 4 4 4 5 2 6 5 图中给出了一个数字三角形。从三角形的顶部到底部有很多条不同的路径。对于每条路径,把路径上面的数加起来可以得到一个和,你的任务就是找到最大... 阅读详情

题目:数字三角形,从顶部出发,在每一结点可以选择向左走或得向右走,一直走到底层,要求找出一条路径,该路径上的数字和最大,输出这个最大值。

(1)样例输入:
第一行是数塔层数N(1<=N<=100)。
第二行起,从一个数字按数塔图形依次递增,共有N层。
5
13
11 8
12 7 26
 6 14 15 8
12 7 13 24 11


思路:递归解决

用二维数组 d[ l ][ r ] 存数字三角形

 if ( l  ==  n) maxSum( l , r ) = d [ l ][ r ] ;

 else maxSum ( l , r ) = max { maxSum( l+1, r ) , maxSum( l+1, r+1 ) }

很简单呀


代码如下:

[cpp]  view plain  copy
  1. #include <iostream>  
  2. #include <algorithm>  
  3.   
  4. using namespace std;  
  5.   
  6. #define MAX 101  
  7.   
  8. int d[MAX][MAX];  
  9. int n;  
  10.   
  11. int MaxSum(int l,int r)  
  12. {  
  13.   
  14.     if(l==n)  
  15.         return d[l][r];  
  16.     else  
  17.         return max(MaxSum(l+1,r),MaxSum(l+1,r+1))+d[l][r];  
  18.   
  19. }  
  20.   
  21. int main()  
  22. {  
  23.   
  24.     cin >> n;  
  25.   
  26.     for(int i=1;i<=n;i++)  
  27.         for(int j=1;j<=i;j++)  
  28.             cin >> d[i][j];  
  29.     cout << MaxSum(1,1) << endl;  
  30.   
  31.     return 0;  
  32.   
  33. }  

好了,数据量大一点的时候,就华丽丽的超时了

分析一下时间复杂度,发现是 O(2^n),原因是

会 重 复 计 算 maxSum (r,l) 的值!

————————————————————————————————————————————————————————————————————————————


优化:(记忆递归型动态规划)

思路:那就把计算结果存下来嘛。


代码如下:

[cpp]  view plain  copy
  1. #include <iostream>  
  2. #include <algorithm>  
  3.   
  4. using namespace std;  
  5.   
  6. #define MAX 101  
  7.   
  8. int d[MAX][MAX];  
  9. int n;  
  10. int maxSum[MAX][MAX];  
  11.   
  12. int MaxSum(int i,int j)  
  13. {  
  14.     if(maxSum[i][j]!=-1)  
  15.         return maxSum[i][j];  
  16.     if(i==n)  
  17.         maxSum[i][j] = d[i][j];  
  18.     else  
  19.         maxSum[i][j] = max(MaxSum(i+1,j),MaxSum(i+1,j+1)) + d[i][j];  
  20.   
  21.     return maxSum[i][j];  
  22. }  
  23.   
  24.   
  25. int main()  
  26. {  
  27.   
  28.     cin >> n;  
  29.   
  30.     for(int i=1;i<=n;i++)  
  31.         for(int j=1;j<=i;j++){  
  32.             cin >> d[i][j];  
  33.             maxSum[i][j]=-1;  
  34.         }  
  35.   
  36.     cout << MaxSum(1,1) << endl;  
  37.   
  38.     return 0;  
  39. }  

算法时间复杂度成功变成 O(n^2);

不过递归还是慢一点,继续优化! 



数字三角形——递归求解 一个数字三角形。从三角形的顶部到底部有很多条不同的路径。对于每条路 径,把路径上面的数加起来可以得到一个和,和最大的路径称为最佳路径。任务就是求 出最佳路径上的数字之和。 注意:路径上的每一步只能从一个数走到下一层上和它最近的左边的数或者右边的数。   以下是代码实现 #include using namespace std; #define MAX 100 int Arr 阅读详情

相关推荐

数字三角(算法)

问题描述:给定一个由n行数字组成的数字三角形,如下图所示。试用动态规划算法,计算出从三角顶部至底部的一条路径,使得该路径经过的数字总和最大。 7 3 8 8 1 0 2 7 4 4 4 5 2 6 5 输入格式 第一行是数字三角的行数n,1<=n<=100。接下来n行是数字三角各行中的数字,所有数字在0~99之间。 输出格式 输出两行,第一行是计算出的最大路径的和值,第二行是该路径上的数字。若有多条路径,靠右的路径优先(即仅仅输出靠右的路径即可,无需多条路径都输出)。 如: Input: 5 7 3 8 8 1 6 2 7 4 4 4 5 2 4 5 有两条路径:7-3-8-7-5和7-8-6-4-5都为30,由于后者靠右,因此仅输出后者。 Output: 30 7 8 6 4 5 输入样例 5 7 3 8 8 1 0 2 7 4 4 4 5 2 6 5 输出样例 30 7 3 8 7 5

数字三角形问题--动态规划

问题描述: 数字三角形,从顶部出发,在每一结点可以选择向左走或者向右走,一直走到底层。 试设计一个算法,计算出从三角形的顶至底的一条路径,使该路径经过的数字总和最大。 易错点:采用贪心算法就无法找到真正的最大和。 当从顶部向下,或者从底部向上贪心时都是错误的。 算法分析: 从数字三角形的特点来看,不难发现解决问题的阶段划分,应该是自下而上逐层决策。不同于贪心策略的是,动态规划算法是逐层递推的。 状态转移方程如下: 其中 i =n-2,n-3,…,0(0≤j≤i)。 计算数字三角形问题的动态规划

Woo~ 1252

算法分析与设计:动态规划(数字三角形+导弹拦截问题)(C++可执行源码+完整算法分析)

题目 1:如下图所示的数字三角形。假设某个人从该三角形的顶部出发,在每一个结点处均可选择向左走或者向右走,一直走到底层。试设计一个算法,帮助该人从顶部走到底部,使其所走的所有数字之和最大。 题目 2:某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统。但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能高于前一发的高度。某天,雷达捕捉到敌国的导弹来袭。由于该系统还在试用阶段,所以只有一套系统,因此有可能不能拦截所有的导弹。输入导弹依次飞来的高度(雷达给出的高度数据是不大于 30000 的正整数),计算这套系统最多能拦截多少导弹,如果要拦截所有导弹最少要配备多少套这种导弹拦截系统。

算法 — 数字三角形

上图给出了一个数字三角形。从三角形的顶部到底部有很多条不同的路径。对于每条路径,把路径上面的数加起来可以得到一个和,你的任务就是找到最大的和。此外,向左下走的次数与向右下走的次数相差不能超过 1。蓝桥杯/Java

m0_59705760的博客 3468

Camera Sensor接口协议全解析(六)聚焦onsemi HiSPi接口的技术突破与应用实践

摘要: Onsemi HiSPi是一种高速并行接口协议,专为高分辨率图像传感器设计,具备1600 Mbps传输速率、低功耗和高兼容性特点。通过对比DVP、MIPI CSI-2等主流协议,HiSPi在工业/医疗领域表现突出,支持动态功耗控制、多ROI和CRC校验。其创新架构包含多PHY设计,提供分组SP、流SP等多种工作模式,满足灵活传输需求。实际应用中,HiSPi在PCB缺陷检测(5μm精度)和液晶面板检测(0.3% Mura检出率)等场景展现卓越性能,成为高速成像领域的关键技术。

GateWorld的博客 1435

别再手动查日志了!用Dify+Zabbix打造你的专属运维“嘴替”(保姆级配置流程)

本文详细介绍了如何利用Dify平台与Zabbix监控系统集成,构建智能运维对话系统,实现自然语言交互的运维管理。通过保姆级配置流程,帮助运维工程师提升查询效率、降低学习成本,打造企业级智能运维解决方案。

weixin_27298377的博客 456

数字三角形路径最小值c语言题目,经典算法题:数字三角形寻找最大路径

题目:数字三角形,从顶部出发,在每一结点可以选择向左走或得向右走,一直走到底层,要求找出一条路径,该路径上的数字和最大,输出这个最大值。(1)样例输入:第一行是数塔层数N(1<=N<=100)。第二行起,从一个数字按数塔图形依次递增,共有N层。51311 812 7 266 14 15 812 7 13 24 11思路:递归解决用二维数组 d[ l][ r] 存数字三角形if (...

weixin_35859737的博客 725

11种图像清晰度评价函数附MATLAB代码

博主的第一篇博客! 本科毕业论文是“基于图像处理的自动对焦技术研究”,对焦过程中的一个重要阶段是图像清晰度评价,博主自己用MATLAB实现了4类清晰度评价函数:基于图像梯度的清晰度评价函数、频域评价函数、信息熵评价函数、统计学评价函数,总计11种。博主之前没有用过MATLAB,完全是本科论文需要,没办法对着别人的代...

kungfu_rabbit的博客 5万+

【记忆化搜索 & 动态规划】 数字三角形最佳路径

题目描述: 给你一个数字三角形, 形式如下: 2 105 4 3 6 1 8 7 9 找出从第一层到最后一层的一条路,使得所经过的权值之和最小或者最大 算法1: 记忆化搜索 从顶到底层记忆每一步; #include<iostream> #define N 50 using namespace std...

piano_diano的博客 943

Python爬虫实战:利用Scrapy+Playwright高效爬取TED演讲数据

在当今信息爆炸的时代,TED演讲作为全球知名的思想传播平台,汇聚了各领域顶尖人才的精彩分享。对于数据分析师、研究人员或内容创作者来说,获取TED演讲的完整数据集具有重要价值。本文将详细介绍如何使用Python中最先进的爬虫技术组合——Scrapy框架配合Playwright浏览器自动化工具,高效爬取TED演讲的完整数据。传统爬虫技术在处理现代动态网页时面临诸多挑战,而本文将展示如何利用最新工具解决这些问题。

2201_76125261的博客 205

Cartographer实现双雷达建图

TRAJECTORY_BUILDER_2D.num_accumulated_range_data = 2 --执行一次前端匹配需要的激光扫描分段数量。关于num_subdivisions_per_laser_scan。num_laser_scans =2,--订阅激光扫描话题数量。Frame改为 前雷达laser_1 后雷达laser_2。雷达的话题由scan改为,前scan_1 后scan_2。有些人说需要改成2,但我这里改成2反而不行,1才可以。

Studying…… 1261

经典算法题:数字三角形寻找最大路径——动态规划和递归调用两种解法

题目:数字三角形,从顶部出发,在每一结点可以选择向左走或得向右走,一直走到底层,要求找出一条路径,该路径上的数字和最大,输出这个最大值。 (1)样例输入: 第一行是数塔层数N(1 第二行起,从一个数字按数塔图形依次递增,共有N层。 5 13 11 8 12 7 26  6 14 15 8 12 7 13 24 11 (2)样例输出:86 方法1动态规划 状态

我的专栏 7731

26、电子测量与旋转编码器控制技术解析

本文深入解析了电子测量中的电感测量技术与旋转编码器的控制方法。介绍了LC电路振荡原理、滤波器类型及其应用,并通过代码实现了基于脉冲宽度的电感值计算。对比了陶瓷电容与电解电容在高频测量中的性能差异。在旋转编码器部分,详细阐述了其工作原理,提出了抖动问题和检测遗漏的解决方案,包括中断检测法和基于4位状态映射的高精度控制方法。文章还探讨了相关技术在电力系统、通信设备、工业自动化和智能家居中的应用,并展望了高精度、智能化、小型化和无线化的发展趋势,为电子系统设计提供了实用指导和技术参考。

elastic6hunter的博客 97

数字三角形求最大路径和的多种解法

问题描述:   在数字三角形中寻找一条从顶部到底边的路径,使得路径上所经过的数字之和最大。路径上的每一步都只能往左下或者右下走,只需要求出这个最大和即可,不需要给出具体路径。 例如: 7 3 8 8 1 0 2 7 4 4 4 5 2 6 5 解法一:   递归。每一个点都有两个方向选择,所以递归树是二叉树。 代码如下: import java.util.Scanner; public cl...

覃会程的博客 3136

2025届程序技术类笔试题

希尔排序在直接插入排序的基础上进行了改进,它通过比较相距一定间隔的元素来进行,各轮比较所用的距离随着算法的进行而减小,直到只比较相邻元素的最后一轮排序为止。某人逆着水流的方向向岸边划船,每次行进前进x米后需要休息一下,休息期间船会自行倒退y米,每次休息后再次行进,前进距离缩短1/5,若起始距离岸边为m米,问:能否到达岸上,需要行进多少次才能上岸。直接插入排序的原理是将第i个元素插入前面i-1个已排好序的记录中,将比第i个元素大的记录依次向后移动一个位置,将第i个元素插入空位。第二轮相邻比较,后移2次。

博客 591

手把手教你学 Simulink (1.3)--Simulink 的模块库及其模块介绍

Simulink 提供了丰富的模块库,涵盖了从基本的信号生成和处理到复杂的数学运算和系统建模的各种功能。通过熟悉这些模块库及其模块,你可以更高效地构建和仿真动态系统。

MHD0815的博客 5150

经典算法-----数字三角形路径最大问题

前面讲到去通过递归的方式来实现这个算法,很明显其时间复杂度为O(2^n),但是如果递归的深度过深的话,也就是说输入的数据很多的话就很容易出现系统计算量过大卡死。对此我们可以通过优化递归的代码来减少时间复杂度,我们可以去创建一个记忆数组来储存前面所递归的结果。举个例子,对于斐波那契数列1 1 2 3 5……,我们可以用递归算法去实现,同样的如果要往很后面算的话也会面临这个问题,如果我们创建这么一个数组array来储存前两个数据的话,到时候我们直接拿出来用就行了比如当前array储存了2和3,那么我要算5的时候

m0_73633088的博客 1425

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

数字三角形的最大路径之及路径

问题描述: 有一个形式如下的数字三角形:                 7               3 8              8 1 0             2 7 7 4            4 5 2 6 5 从三角形顶点,沿左斜线方向或右斜线方向下降到三角形底边的路线是一条合法路径。 例如,图中用红色标出的路径就是合法的;我们可以将这条路径记为“LLRL”

魁山老妖 1910

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

在三角形中寻找一条从顶部到底边的路径,使得路径上所经过的数字之和最大。Java代码

1.题目 算法分析与设计作业—— 2.思路 转移方程:dp[i][j]+=max(dp[i-1][j-1],dp[i-1][j]) 在三角形中,每个位置的最大路径和为 当前位置值+max(左上最大和,右上最大和)。具体在数组中,是上面的和左上的位置的最大和。遍历数组,获得每个位置的最大和,并且同时更新变量max,返回max。 3.代码 public class Solution2 { public static void main(String[] args) { int k=5;

乾坤未定,你我皆是黑马 1902

问题描述 给定一个由n行数字组成的数字三角形如下图所示。试设计一个算法,计算出从三角形的顶至底的一条路径,使该路径经过的数字总和最大。 对于给定的由n行数字组成的数字三角形,计算从三角形的顶至底

问题描述 给定一个由n行数字组成的数字三角形如下图所示。试设计一个算法,计算出从三角形的顶至底的一条路径,使该路径经过的数字总和最大。 对于给定的由n行数字组成的数字三角形,计算从三角形的顶至底的路径经过的数字和的最大值。 输入 输入数据的第1行是数字三角形的行数n,1≤n≤100。接下来n行是数字三角形各行中的数字。所有数字在0…99之间。 输出 输出数据只有一个整数,表示计算出的最大值。 示例输入 5 7 3 8 8 1 0 2 7 4 4 4 5 2 6 5 示例输出 30 分析步骤——&.

weixin_43899069的博客 6568

动态规划之数字三角形问题

问题描述 在数字三角形中寻找一条从顶部到底边的路径,使得路径上所经过的数字之和最大。路径上的每一步都只能往左下或者右下走。只需要求出这个最大和即可。不必给出具体路径。 三角形的行数大于1小于等于100,数字为0-99 输入格式 5 //三角形行数。下面是三角形 7 3 8 8 1 0 2 7 4 4 4 5 2 6 5 要求输出最大和 样例输入 5 7 3 8 8 1 0 2 7 4 4 4 5 2 6 5 样例输出 30 算法思想 7 3 8 8 1 0 2 7 4 4 4 5 2 6 5 右

Java硬件工程师的博客 2807

C++ 算法 OJ-43题: 数字三角形,求路径和的最大值

OJ-43题: 数字三角形 题目描述: 有一个由数字组成的三角形数塔,站在上一层的某个点,只能到达其下方左右的两个点。现在请找到一条从上到下的路径,使得路径上所有数字相加之和最大 输入 第一行输入一个数字 n(1≤n≤1000)代表数塔层数 接下来n行,按数塔图形,每行有一个或多个的整数,表示该层节点的值(节点值≤100000) 输出一个整数,代表从上到下路径上所有数字相加和的最大值。 样例输入: 6 3 9 5 4 2 1 3 4 9 6 3 5 3 7 3 2 1 3 9 3 2

qq_34970171的博客 1039

动态规划求最大路径-三角形最大路径和矩阵最大路径

1.数字三角形求最大路径 问题: 给定一个由n行数字组成的数字三角形如下图所示。试设计一个算法,计算出从三角形的顶至底的一条路径,使该路径经过的数字总和最大。 7 3 8 8 1 0 2 7 4 4 4 5 2 6 5 对于给定的由n行数字组成的数字三角形,编程计算从三角形的顶至底的路径经过的数字和的最大值。 数据输入:由文件input.txt提供输入数据。文件的第1行是数字三角形的行数n,1<n<100。接下来n行是数字三角形各行中的数字。所有数字在

数据库 1820

数字三角形最大路径和:从思路到动态规划实现

数字三角形最大路径和问题揭示了贪心算法的局限性:局部最优不等于全局最优。文章通过具体案例说明,贪心策略可能错过后续更大的收益。动态规划通过记录每个位置的最大和(dp[i][j]),从顶部到底部逐步计算,最终得到全局最优解。算法采用二维数组存储中间状态,区分边界情况处理,时间复杂度O(n²)。典型的测试用例验证了方案的正确性,3→8→7路径得到最大和18。动态规划的优势在于能综合考虑所有可能路径,适用于需要记录中间状态的决策问题。

2301_80567637的博客 1022

C++数字三角形问题

问题描述:给定一个由n行数字组成的数字三角形,试设计一个算法,计算出从三角形的顶至底的一条路径,使该路径经过的数字总和最大。 数字三角形如下所示: 输入示例: 5 7 3 8 8 1 0 2 7 4 4 4 5 2 6 5 输出: 30 #include <iostream> using namespace std; int main() { int t[100][100] = { 0 }; int n; cin >> n; for (int i

weixin_45393657的博客 2792

数字三角形求最大路径

/**问题描述】 上图给出了一个数字三角形。从三角形的顶部到底部有很多条不同的路径。 对于每条路径,把路径上面的数加起来可以得到一个和,你的任务就是找到最 大的和。 路径上的每一步只能从一个数走到下一层和它最近的左边的那个数或者右 边的那个数。此外,向左下走的次数与向右下走的次数相差不能超过 1。 【输入格式】 输入的第一行包含一个整数 N (1 < N ≤ 100),表示三角形的行数。下面的 N 行给出数字三角形。数字三角形上的数都是 0 至 100 之间的整数。

qq_44606649的博客 1618
上一篇: 面试:BFS解迷宫问题,并打印最短路径
下一篇: LeetCode 542. 01 Matrix
大树叶
博客等级 码龄12年 1171粉丝 664原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值