正题

题目链接:http://poj.org/problem?id=2373


题目大意

长度为L,要求每个区域都被洒水器覆盖,而且在每只奶牛的喜爱区域只能由一个洒水器覆盖,洒水器必须放在整数点,喷洒半径只能在a∼ba\sim ba∼b区间。


解题思路

我们考虑dp,我可以先想O(n2)O(n^2)O(n2)的。

fi=min{fj}+1(i−2b≤j≤i−2a)f_i=min\{f_j\}+1\ \ \ (i-2b≤j≤i-2a)fi​=min{fj​}+1   (i−2b≤j≤i−2a)

然后我们可以用单调队列维护一下区间。
然后我思考奶牛的问题,奶牛所在的区间不可以有洒水器的中断,而fif_ifi​表示的是最后一个洒水器在iii位置中断需要的最少洒水器数量,所以我们保证在奶牛喜爱的区域再往内一圈fif_ifi​的值都为infinfinf就好了。


code

#include<cstdio>
#include<algorithm>
#include<cstring>
#include<queue>
#define inf 0x3f3f3f3f
using namespace std;
deque<int> q;
int n,l,a,b,w[1000010],f[1000010],x,y,sum;
int main()
{scanf("%d%d%d%d",&n,&l,&a,&b);b=2*b;a=2*a;for(int i=1;i<=n;i++){scanf("%d%d",&x,&y);w[x+1]++;w[y]--;//标记}for(int i=2;i<=l;i+=2){sum+=w[i]+w[i-1];//记录前缀和while(!q.empty()&&i-b>q.front())q.pop_front();//维护区域int addn=i-a;//维护区域if(addn>=0){while(!q.empty()&&f[q.back()]>=f[addn])q.pop_back();//维护单调性q.push_back(addn);//加入队列}if(!q.empty()&&f[q.front()]<inf&&!sum) f[i]=f[q.front()]+1;//有值else f[i]=inf;//无值}printf("%d",f[l]==inf?-1:f[l]);//输出
}

POJ2373-Dividing the Path【单调队列优化dp】相关推荐

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

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

  2. poj 2373(单调队列优化dp)

    在长为L(<=1000000)的草地(可看成线段)上装喷水头,喷射是以这个喷水头为中心,喷水头的喷洒半径是可调节的调节范围为[a,b].要求草地的每个点被且只被一个喷水头覆盖,并且有些连续区间必 ...

  3. poj 1821(单调队列优化dp)

    题意:有一道线性篱笆由N个连续的木板组成.有K个工人,你要叫他们给木板涂色.每个工人有3个参数:L 表示 这个工人可以涂的最大木板数目,S表示这个工人站在哪一块木板,P表示这个工人每涂一个木板可以得到 ...

  4. 洛谷P3195 [HNOI2008]玩具装箱TOY(单调队列优化DP)

    题目描述 P教授要去看奥运,但是他舍不下他的玩具,于是他决定把所有的玩具运到北京.他使用自己的压缩器进行压缩,其可以将任意物品变成一堆,再放到一种特殊的一维容器中.P教授有编号为1...N的N件玩具, ...

  5. 【计蒜客 - 蓝桥训练】蒜厂年会(单调队列优化dp,循环数列的最大子段和)

    题干: 在蒜厂年会上有一个抽奖,在一个环形的桌子上,有 nn 个纸团,每个纸团上写一个数字,表示你可以获得多少蒜币.但是这个游戏比较坑,里面竟然有负数,表示你要支付多少蒜币.因为这些数字都是可见的,所 ...

  6. 单调队列以及单调队列优化DP

    单调队列定义: 其实单调队列就是一种队列内的元素有单调性的队列,因为其单调性所以经常会被用来维护区间最值或者降低DP的维数已达到降维来减少空间及时间的目的. 单调队列的一般应用: 1.维护区间最值 2 ...

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

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

  8. 【单调队列优化DP】烽火传递 LibreOJ - 10180

    题目来源 点我进入提交题目 反思 因为目前在学习单调队列优化DP,所以会往单调队列上面想.然后犯了一个错误就是,认为这个题目只要用单调队列就可以完成,单调队列只是用来减少时间复杂度的,遇到了求最优解的 ...

  9. AcWing 1089 烽火传递 题解(动态规划—DP—单调队列优化DP)

    AcWing 1089 烽火传递 单调队列优化DP,思路比较简单,维护一个保持元素单调递增的单调队列,队首就是第i座烽火台能接收到的,代价最小的方案,加上第i座烽火台的代价就是这座烽火台的最小值 #i ...

  10. 【单调队列优化dp】jzoj4883灵知的太阳信仰 纪中集训提高B组

    [NOIP2016提高A组集训第12场11.10]灵知的太阳信仰 (File IO): input:array.in output:array.out Time Limits: 1000 ms Mem ...

最新文章

  1. named 客户端无法解析_解析天联高级版客户端无法访问用友U8问题
  2. “读书”频道的一些链接错误
  3. 通过nginx链接mysql事务问题_nginx-关于phpmysql的事务
  4. java自定义表单系统_表单识别:自定义表单模板无需额外定制
  5. python获取系统当前时间并转utc时间为绝对秒数_用Python将datetime.date转换为UTC时间戳...
  6. 0 重新学习Ubuntu -- 这一段没怎么学习
  7. SpringBoot2.1.5(45)--- Spring Boot的核心模块
  8. 控制台的左侧显示证书树形列表_一款免费签发Https证书的工具:Let's Encrypt
  9. 可以出题的答题小程序
  10. 【ArcGIS】02 植被分类
  11. DaZeng:雪碧图(精灵图)的使用
  12. 怎么快速批量修改图片大小?
  13. 在Centos6/RHEL6上恢复ext4文件系统下误删除的文件
  14. vue项目,h5图片放大后,支持手指缩放功能
  15. MySQL-日期处理
  16. gs地图开发_当红小生东风风神奕炫GS 有颜有型
  17. 《Gans in Action》第三章 用GAN生成手写数字
  18. 细说振动位移、速度、加速度
  19. C#--虚方法的使用
  20. 我学会了用计算机作文,我学会了用计算机

热门文章

  1. dataframe 修改某列_python dataframe操作大全数据预处理过程(dataframe、md5)
  2. mysql 5.7.6 5.7.19_MySQL数据库之Mysql 5.7.19 免安装版遇到的坑(收藏)
  3. 信管专业c语言考什么,计算机信息管理专业卫生事业单位招聘考试笔试模拟题(十)...
  4. redis session java获取attribute_redis里的数据结构
  5. c++tcp接收文件缓存多大合适_网易面经:深剖TCP协议的流量控制和拥塞控制,你懂了吗?...
  6. c++ 多重背包状态转移方程_【考前再叮嘱】陌生方程式书写
  7. python的基础知识可以应用到哪方面-Python基础知识
  8. realloc函_[转载]realloc函数的使用及注意事项(转)
  9. Java使用TCP实现群聊 聊天室(多线程和tcp的使用)
  10. matlab程序改为m文件名,在MATLAB中,程序文件的扩展名为.m,所以程序文件也称为M文件...