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 ];
思路二
通过观察我们会发现,这道题因为有一个向下走的次数限制,有些地方是不可能被走到的。
比如下面这个图,绿线以下的那几个点是一定不可能被