传送门:http://poj.org/problem?id=1661
思路:本来以为是dp二维x, y, 但是不可能开那么大,状态也不好规划。无奈之下看了题解。
dp[i][0]表示从左边到达i的最小花费
dp[i][1]表示从右边到达i的最小花费
然后考虑怎么转移。
例:
-----------------------------------
---------------- --------------------
到达最上面的木板可以从左边或右边,下面的一直递推。
状态转移方程:
dp[i][0] = h[i] - h[j] + min( dp[j][0] + l[i] - l[j], dp[j][1] + r[j] - l[i] )
dp[i][1] = h[i] - h[j] + min( dp[j][0] + r[i] - l[j], dp[j][1] + r[j] - r[i] )
也就是线段左端 + 交叉的距离 或 线段右端 + 交叉的距离
其中还有最大高度的细节处理,分为两类,①找不到并且距离之外,②找不到但距离之内
AC代码:
#include
#include
#include
#include
#include
#include
#include
#include
#include