三角数组最小路径和问题

题目:

给出一个三角形vector<vector<int>> ve,计算从三角形顶部到底部的最小路径和,每一步都可以移动到下面一行相邻的数字。

使用动态规划算法。

题目解析:

题目的意思是从顶到底画出一条路径,路径在每一层水平方向的跳跃最多一步,这条路径的数字之和要是最小的。这到题在解的时候必须要从底开始,因为从上到下选择路径只能用贪吃算法,得不到最优解。使用动态规划算法需要先找到问题子结构。设dp[i][j]为自底向上计算得到的最小路径和的i行j列,应有公式:

dp[i][j] = min(dp[i+1][j], dp[i+1][j+1]) + ve[i][j]

由此便可一步步计算到dp[0][0]。但是这样会造成空间的浪费,其实我们只需一个一维数组去保存dp的值,每一步迭代会更新dp的值。

于是可以得到:

dp[i] = min( dp[i], dp[i+1]) + ve[i]

计算到dp[0]即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值