离散化写挫了就wa了n发。。
先按照右端点排序,设dp[i]为铺满1到i的最小价值,注意是铺满,那么就可以在这里更新dp[r[i]]=min(dp[j])+v[i] l[i]<=j<=r[i],注意这里有一个-1,对于左端点来说,因为如果两个线段相邻二不相交,比如(1,2)(3,4),这样其实也是可以的。这里的话,如果直接把端点离散化,就会导致后面的操作很复杂,因为要考虑相邻中间有没有空(我也是这么错的),所以不如直接在一开始读入左端点的时候就给他-1,这样之后就不用什么多余的操作了,直接每次线段树查询最小值即可。
另外一个是为什么这个dp策略是正确的:这里能保证正确的原因完全是因为,给定的所有线段的最右端点都小于等于E,也就是说要么不能覆盖到,要么一定至少有1个地毯可以覆盖且刚好覆盖到E,所以只需要使状态为铺满1到i就可以了,虽然这其中一些点的dp值对于其意义来说是错误的,但是对于最后这个E却是一定正确的!
//#include
#include
#include
#include
#include