POJ-2373-单调队列优化dp

题目大意:有一块长度为l的草原,你需要用洒水器把所有草坪都覆盖并且每块草坪只能被覆盖一次,有n个奶牛所在的草坪属于[l,r],这些区间只能有一个洒水器;

题目解析:定义dp[i]为在第i块草坪结束的时候所苏姚最少的洒水器,dp[i]=min(dp[j]+1),i-2b<=j<=i-2a,还有一个问题就是n个奶牛的问题,其实只要标记那些草坪是不能结束的就可以了;

AC代码:

#include
#include
#include
#include
#include
using namespace std;
const int maxn=1010;
const int inf = 0x3fffffff;
struct node
{
	int x,y;	
}p[maxn];
bool cmp(node a,node b)
{
	if(a.x==b.x) return a.yfront)	
			{
				f[i]=f[q[front]]+1;
				//cout<



你可能感兴趣的:(dp,单调队列)