这算是一个经典的动态规划题了吧,由于是中文题目,所以题目很好理解.
这个题目的关键也就是找出状态转移方程,然后跟据它写出递归函数(当然也可以用迭代),我越来越意识到递归是个很神奇的东西,和分治法联系在一起的时候问题一下子就变得豁然开朗了.
由于下落的时间是一定的,所以只需要求出最短的爬行时间再加上下落时间就可以了.
大概思路就是下面的:
0, k=N+1
FindMin(x,k) = max{x - aPlatform[k].Lx + FindMin( aPlatform[k].Lx , NextLeft ),
aPlatform[k].Rx - x + FindMin( aPlatform[k].Rx , NextRight ) }, 0<=k<=N
还可以参照这个的解释,算是很详尽的了:
http://www.cppblog.com/mythit/archive/2009/06/26/88539.aspx