题意:





思路:

f[i] = min(f[j]) + 1; 2 * a <= i - j <= 2 *b;

i表示当前在第i个点。f[i]表示当前最少的线段个数

先是N^2的朴素DP(果断TLE)

//By SiriusRen
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
int n,l,A,B,tot=1,xx,yy,f[1000050];
struct Node{int x,y;}node[1050];
bool cmp(Node a,Node b){if(a.x!=b.x)return a.x<b.x;return a.y<b.y;}
int main()
{
memset(f,0x3f,sizeof(f));
f[0]=0;
scanf("%d%d%d%d",&n,&l,&A,&B);
for(int i=1;i<=n;i++){
scanf("%d%d",&node[i].x,&node[i].y);
}
sort(node+1,node+1+n,cmp);
for(int i=1;i<=l;i++){
while(i>node[tot].x&&tot<n){i=node[tot].y;tot++;}
if(i&1)continue;
for(int j=2*A;j<=2*B;j+=2){
f[i]=min(f[i],f[i-j]+1);
}
}
printf("%d\n",f[l]);
}

下面我们开始想优化…

a和b都是常数,,他要找一个最大值。。

1.线段树优化 (卡时过)

2.单调队列优化

注意插入的时候要等到算f[i+2*a]的时候再把f[i]插到队列里。

(用STL的双端队列写得)

//By SiriusRen
#include <deque>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
int n,l,A,B,tot=1,xx,yy,f[1000050];
struct Node{int x,y;}node[1050],jy;
bool cmp(Node a,Node b){if(a.x!=b.x)return a.x<b.x;return a.y<b.y;}
deque<Node>q;
int main(){
memset(f,0x3f,sizeof(f)),f[0]=0;
scanf("%d%d%d%d",&n,&l,&A,&B);
for(int i=1;i<=n;i++)scanf("%d%d",&node[i].x,&node[i].y);
sort(node+1,node+1+n,cmp);
for(int i=1;i<=n;i++)
for(int j=max(node[i].x+1,node[i-1].y);j<node[i].y;j++)f[j]=0x5fffffff;
for(int i=A*2;i<=l;i+=2){
while(!q.empty()&&q.front().x<i-2*B)q.pop_front();
while(!q.empty()&&q.back().y>f[i-2*A])q.pop_back();
if(f[i-2*A]<0x3ffffff)
jy.x=i-2*A,jy.y=f[i-2*A],q.push_back(jy);
if(f[i]>=0x4fffffff)continue;
if(!q.empty())f[i]=q.front().y+1;
}
if(f[l]<0x3ffffff)printf("%d\n",f[l]);
else puts("-1");
}

POJ 2373 单调队列优化DP的更多相关文章

  1. POJ - 1821 单调队列优化DP + 部分笔记

    题意:n个墙壁m个粉刷匠,每个墙壁至多能被刷一次,每个粉刷匠要么不刷,要么就粉刷包含第Si块的长度不超过Li的连续墙壁(中间可不刷),每一块被刷的墙壁都可获得Pi的利润,求最大利润 避免重复粉刷: 首 ...

  2. poj 2373 单调队列优化背包

    思路:我们用单调队列保存2*b<=i-j<=2*a中的最大值.那么队列头就是最大值,如果队头的标号小于i-2*b的话,就出队,后面的肯定用不到它了. #include<iostrea ...

  3. poj 1821 Fence 单调队列优化dp

    /* poj 1821 n*n*m 暴力*/ #include<iostream> #include<cstdio> #include<cstring> #incl ...

  4. POJ 1821 Fence(单调队列优化DP)

    题解 以前做过很多单调队列优化DP的题. 这个题有一点不同是对于有的状态可以转移,有的状态不能转移. 然后一堆边界和注意点.导致写起来就很难受. 然后状态也比较难定义. dp[i][j]代表前i个人涂 ...

  5. 算法笔记--单调队列优化dp

    单调队列:队列中元素单调递增或递减,可以用双端队列实现(deque),队列的前面和后面都可以入队出队. 单调队列优化dp: 问题引入: dp[i] = min( a[j] ) ,i-m < j ...

  6. 单调队列优化DP——习题收集

    前言 感觉可以用单调队列优化dp的模型还是挺活的,开个随笔记录一些遇到的比较有代表性的模型,断续更新.主要做一个收集整理总结工作. 记录 0x01 POJ - 1821 Fence,比较适合入门的题, ...

  7. 单调队列优化DP,多重背包

    单调队列优化DP:http://www.cnblogs.com/ka200812/archive/2012/07/11/2585950.html 单调队列优化多重背包:http://blog.csdn ...

  8. bzoj1855: [Scoi2010]股票交易--单调队列优化DP

    单调队列优化DP的模板题 不难列出DP方程: 对于买入的情况 由于dp[i][j]=max{dp[i-w-1][k]+k*Ap[i]-j*Ap[i]} AP[i]*j是固定的,在队列中维护dp[i-w ...

  9. hdu3401:单调队列优化dp

    第一个单调队列优化dp 写了半天,最后初始化搞错了还一直wa.. 题目大意: 炒股,总共 t 天,每天可以买入na[i]股,卖出nb[i]股,价钱分别为pa[i]和pb[i],最大同时拥有p股 且一次 ...

随机推荐

  1. 玩转oracle学习第六天

     1.上节回想 2.PL/SQL的介绍 3.PL/SQL的基础 理解oracle的pl/sql概念 掌握PL/SQL编程技术(包含编写过程,函数,触发器.包... ) PL/SQL是什么? PL/ ...

  2. iOS-UIImage imageWithContentsOfFile 和 imageName 对照

    1.imageWithContentsOfFile NSString *imagePath = [NSString stringWithFormat:@"%@/%@",[[NSBu ...

  3. HTTP Status 500 - Request processing failed; nested exception is java.lang.NullPointerException

    HTTP Status 500 - Request processing failed; nested exception is java.lang.NullPointerException type ...

  4. 轻松学习JavaScript十七:JavaScript的BOM学习(二)

    JavaScript计时事件 通过使用JavaScript中的BOM对象中的window对象的两个方法就是setTimeout()方法和claerTimeout()方法,我们 有能力作到在一个设定的时 ...

  5. 初始化的数值(int、double等)(一)

    首先考虑一个具有几个构造函数的MyClass类.如果我们决定在这个类的私有部分加入一个新的数据成员,称为int_data_: class MyClass { public: MyClass() : i ...

  6. TS 函数解析

    ------------------------------------------------------------------------------------ 函数传参: //let myA ...

  7. legend---十一、thinkphp事务中if($ans1&&$ans2){}else{}方式和try{}catch{}方式事务操作的区别在哪里

    legend---十一.thinkphp事务中if($ans1&&$ans2){}else{}方式和try{}catch{}方式事务操作的区别在哪里 一.总结 一句话总结:执行的条件其 ...

  8. xBIM 高级02 插入复制功能

    系列目录    [已更新最新开发文章,点击查看详细]  IFC 模型中的合并和删除实体是一个非常重要的任务,因为 IFC 不是一个分层结构.它是一个复杂的结构,具有潜在的循环关系,是一个双向导航.在单 ...

  9. c#邮件发送服务

    邮件发送服务 项目中会遇到定时给某人发送邮件的功能要求,这里是京东的一段代码,当然也是我同事找的,我记录学习一下,以免忘记. 这是解决方案 这里主要是工具:日志工具,链接数据库工具,发送邮件工具 这里 ...

  10. atom安装插件失败 latex

    用atom写latex 链接 http://www.cnblogs.com/schaepher/p/5934184.html 但在gui下安装插件失败 按照以下步骤解决了 安装gitbash cd . ...