java动态规划之数字三角形_动态规划 数字三角形

问题描述

c5ca89478a4b

在上面的数字三角形中寻找一条从顶部到底边的路径,使得路径上所经过的数字之和最大。路径上的每一步都只能往左下或右下走。只需要求出这个最大和即可,不必给出具体路径。

三角形的行数大于1小于等于100,数字为 0 - 99

输入格式:

5 //三角形行数。下面是三角形

7

3 8

8 1 0

2 7 4 4

4 5 2 6 5

要求输出最大和

Sample Output

30

整体思路仍然是递推求解。

用D( r, j) 来表示第r行第 j 个数字(r,j从1开始算)

用maxSum(r, j)表示从D(r,j)到底边的各条路径中,最佳路径的数字之和。maxSum(n,j)==D(n,j)本身。

因此,此题的最终问题就变成了求 MaxSum(0,0),从(0,0)往下递归地找到(n,0),再通过类似树形结构向上递推获得每一层不同节点的maxSum(r, j)

D(r, j)出发,下一步只能走D(r+1,j)或者D(r+1, j+1)。推出下式

if ( r == N)

maxSum(r,j) = D(r,j)

else

maxSum( r, j) = Max{ maxSum(r+1,j), maxSum(r+1,j+1) } + D(r,j)

由此推出最简单的解决方案

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值