【移动类DP】数字三角形5

该博客讨论了一种数字三角形问题,小K从顶部走到底部,每步可向下或斜线向下,并累加路径上的数字。问题在于找到在最多k次向下斜线行走后的最大累加值。提供了两种解决方案,一种是三维动态规划,另一种是利用行走次数限制简化问题,实现更高效的O(n^2)时间复杂度解法。
摘要由CSDN通过智能技术生成

Description

一个数字三角宝塔。
设数字三角形中的数字为绝对值不超过1000的整数。
小K从最顶层走到最底层,每一步可向下或右斜线向下走。
每走过一个节点他会把这个节点的数字加在自己计数器中。
另外他最多只能向下走k次。
现在小K想知道他到达底层后,计数器中可能的最大的值。

Input

输入数据的第1行是数字三角形的行数n和能够沿左斜线向下走的次数k,1<=n<=1000,0<=k<=100。
接下来n行是数字三角形各行中的数字。所有数字都小于1000。

Output

如题

Sample Input

4 2
1
3 2
40 10 1
100 3 2 20

Sample Output

47

分析

思路一

可以将状态设计成三维,表示走到当前位置(i,j)时向下走过k步所能走出的最大值。

状态转移方程

dp[ i ][ j ][ k ] = max(dp[ i - 1 ][ j - 1 ][ k ], dp[ i - 1 ][ j ][ k - 1 ]) + a[ i ][ j ];

思路二

通过观察我们会发现,这道题因为有一个向下走的次数限制,有些地方是不可能被走到的。

比如下面这个图,绿线以下的那几个点是一定不可能被

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值