http://poj.org/problem?id=2373
题意:一条直线分割成N(<=25000)块田,有一群奶牛会在其固定区域吃草,每1把雨伞可以遮住向左右延伸各A到B的区域,一只奶牛吃草区域内不允许有雨伞间隙,即只能被1把雨伞覆盖,求将n块田都覆盖的最少雨伞数。
分析:
易写出dp式子,dp[i]表示覆盖[0,i]需要的最少雨伞数量——
若i不为某一奶牛的领地:dp[i]=min(dp[j])+1,i-2b<=j<=1-2a,且j不属于某一只奶牛的领地
若i为某一奶牛的领地:dp[i]=inf
这里面临两个问题:
1、Q:如何快速处理处牛的领地,即我们如何快速知道哪些点要跳过哪些点要进行dp?
A:对于读入的Bi和Ei,我们可以A[Bi]=-1,A[Ei+1]=1,从而可以通过前缀和快速判断每个位置是否是奶牛的领地
2、Q:如何快速的找出i-2b<=j<=i-2a中的最小值
A:鉴于a,b都是常数,所以这题当然可以用单调队列撸