poj2373 Dividing the Path (单调队列+dp)
题意:给一个长度为L的线段,把它分成一些份,其中每份的长度∈[2A,2B]且为偶数,而且不能在某一些区间内部切开,求最小要分成几份
设f[i]为在i处切一刀,前面的满足要求的最小份数,则f[L]为答案
f[i]=min(f[j])+1,2A<=i-j<=2B,i,j可以切
维护一个单调队列,每次取出来f[i-(2B-2A)..i]的最小值,给到f[i+2A]即可
#include<cstdio>
#include<cstring>
#include<algorithm>
#define inf 0x3f3f3f3f
using namespace std;
const int maxl=; int rd(){
int x=,neg=;char c=getchar();
while(c<''||c>'') {if(c=='-') neg=-;c=getchar();}
while(c>=''&&c<='') x=x*+c-'',c=getchar();
return x*neg;
} int N,L,A,B;
int f[maxl];
int lll[maxl],q[maxl][],qh,qt;
bool flag[maxl]; inline void insert(int x,int y){
for(int i=qt;i>=qh;i--){
if(q[x][]<x){
qt=i+;q[qt][]=x;q[qt][]=y;return;
}
}qt=qh;q[qt][]=x;q[qt][]=y;
} int main(){
//freopen("2373.in","r",stdin);
int i,j,k,ans=inf;
N=rd();L=rd();A=rd();B=rd();
for(i=;i<=N;i++){
j=rd();k=rd();
if(j+<k){
lll[j+]++;lll[k]--;
}
}for(i=,j=;i<L;i++){
j+=lll[i];if(j>||i%==) flag[i]=;
}
qt=qh=;memset(f,-,sizeof(f));
for(i=*A;i<=*B;i++){
if(!flag[i]) f[i]=;
}
for(i=*A;i+*A<=L;i++){
if(!flag[i]&&f[i]!=-){
insert(f[i],i);
}while(i-q[qh][]>*B-*A&&qh<=qt) qh++;
if(!q[qh][]||flag[i+*A]) continue;
if(i+*A==L) ans=q[qh][]+;
else f[i+*A]=q[qh][]+;
}
if(ans!=inf) printf("%d",ans);
else printf("-1");
}
poj2373 Dividing the Path (单调队列+dp)的更多相关文章
- POJ 3017 单调队列dp
Cut the Sequence Time Limit: 2000MS Memory Limit: 131072K Total Submissions: 8764 Accepted: 2576 ...
- [TyvjP1313] [NOIP2010初赛]烽火传递(单调队列 + DP)
传送门 就是个单调队列+DP嘛. ——代码 #include <cstdio> ; , t = , ans = ~( << ); int q[MAXN], a[MAXN], f ...
- zstu 4237 马里奥的求救——(单调队列DP)
题目链接:http://oj.acm.zstu.edu.cn/JudgeOnline/problem.php?id=4237 这题可以转化为每次可以走g~d+x步,求最大分数,且最大分数的步数最少. ...
- 1304F2 - Animal Observation (hard version) 线段树or单调队列 +DP
1304F2 - Animal Observation (hard version) 线段树or单调队列 +DP 题意 用摄像机观察动物,有两个摄像机,一个可以放在奇数天,一个可以放在偶数天.摄像机在 ...
- [USACO2004][poj2373]Dividing the Path(DP+单调队列)
http://poj.org/problem?id=2373 题意:一条直线分割成N(<=25000)块田,有一群奶牛会在其固定区域吃草,每1把雨伞可以遮住向左右延伸各A到B的区域,一只奶牛吃草 ...
- poj2373 Dividing the Path
Dividing the Path Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 5060 Accepted: 1782 ...
- vijos P1243 生产产品(单调队列+DP)
P1243生产产品 描述 在经过一段时间的经营后,dd_engi的OI商店不满足于从别的供货商那里购买产 品放上货架,而要开始自己生产产品了!产品的生产需要M个步骤,每一个步骤都可以在N台机器 ...
- POJ 1821 单调队列+dp
题目大意:有K个工人,有n个墙,现在要给墙涂色.然后每个工人坐在Si上,他能刷的最大范围是Li,且必须是一个连续子区间,而且必须过Si,他刷完后能获得Pi钱 思路:定义dp[i][j]表示前i个人,涂 ...
- codeforces 1077F2. Pictures with Kittens (hard version)单调队列+dp
被队友催着上(xun)分(lian),div3挑战一场蓝,大号给基佬紫了,结果从D开始他开始疯狂教我做人??表演如何AKdiv3???? 比赛场上:A 2 分钟,B题蜜汁乱计数,结果想得绕进去了20多 ...
随机推荐
- 【学习总结】C-翁恺老师-入门-总
2019-1-2 翁恺老师C入门视频-启程 代码详见GitHub: 目录 第0周:程序设计与C语言 第1周:计算 第2周:判断 第3周:循环 第4周:循环控制 第5周:数据类型 第6周:函数 第7周: ...
- CodeForces Round #550 Div.3
http://codeforces.com/contest/1144 A. Diverse Strings A string is called diverse if it contains cons ...
- Java Profiling & Profilers
A Guide to Java Profilers | Baeldunghttps://www.baeldung.com/java-profilers 常用 Java Profiling 工具的分析与 ...
- python3 网页下拉框和悬浮框操作基础汇总
#悬浮定位操作 from selenium.webdrier import ActionChains #浏览器实例化 #定位移动的位置赋给一个参数 ActionChains(浏览器).move_to_ ...
- IdentityServer4【QuickStart】之设置和概述
设置和概述 有两个基本的方式来开启一个新的IdentityServer项目: 从头开始 从asp.net Identity模板开始 如果你从头开始,我们提供了一些基于内存中构建的存储,所以你不必一开始 ...
- Day1 基础知识
数据类型,字符编码 二进制: 定义:二进制数据是用0和1两个数码来表示的数.它的基数为2,进位规则是“逢二进一”,借位规则是“借一当二”.当前的计算机系统使用的基本上是二进制系统,数据在计算机中主要是 ...
- Golang的方法传递值应该注意的地方
其实最近看了不少Golang接口以及方法的阐述都有一个地方没说得特别明白.就是在Golang编译隐式转换传递给方法使用的时候,和调用函数时的区别. 我们都知道,在我们为一个类型变量申明了一个方法的时候 ...
- PreparedStement 用户登录!
一.准备工作 在qy66数据库下,新建一个denglu表.添加 name password . package cn.zhouzhou; import java.sql.Connection; im ...
- Gitlab中README.MD编写格式模板
README.MD文件 格式: 源码: # Hbase组件 ## Maven依赖 ``` <dependency> <groupId>catf</groupId> ...
- Python——SMTP发送邮件
一.定义 SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式.python的smtplib ...