题解:
动态规划,这一题实质上跟2084(数塔)那题是一样的,因为这一题可以转化成数塔问题,“馅饼掉下来的时刻”就是“塔的深度”,也就是dp数组的第1维;而第2维是一样的,都是表示位置。考虑题意给出的输入:
Sample Input
6
5 1
4 1
6 1
7 2
7 2
8 3
0
那么我们可以构造出一个数塔:
第0层: 0[5]
第1层: 1[4] 1[5] 1[6]
第2层: 2[7]
第3层: 1[8]
(没有画出来的元素都被初始化为0。因此,样例输入的答案为4。)
而这道题虽然直观上而言,是从最顶部(第0层)的“下标为5的位置”(记为A)走到最底层(对应于下面代码中的第mDepth层),但是最后找答案的时候,不能保证最底层那个答案就是从A出发的,而这里可以用逆向思维来考虑,即“从A点出发到达最底层的最大值,就是从底层任意一点出发到达A点的最大值”,所以,代码中的循环是倒过来的,正如数塔问题的DP框架。另外,考虑到状态转移方程:
dp[i