BZOJ 1229 [USACO2008 Nov]toy 玩具(三分+贪心)
【题木链接】 http://www.lydsy.com/JudgeOnline/problem.php?id=1229
【题目大意】
每天对玩具都有一定的需求ni,每天可以花f价值每条购买玩具,
当天用完的玩具可以花费fA价值每个通过快消毒在A天之后得到一条可用的,
也可以通过花费fB价值每个,通过慢消毒在B天之后获得可用的
问满足每天需求所用的最小花费。
【题解】
这是纸巾问题的费用流模型,费用流做法见 BZOJ 1221 [HNOI2001] 软件开发
但是我们发现N=100000的规模完全无法用费用流解决
我们发现在最小费用最大流的过程中,每次的最短路长度不降,
最短路是费用的差分值,所以一阶导不下降,那么费用随流量变化的函数是单峰的,
可以三分,三分之后的验证可以通过贪心来实现,
我们先假设把所有的毛巾快洗掉,到后面的天数发现之前决定快洗的毛巾放到慢洗里面也可以
那就把这个点拿出来加入到慢洗完成的队伍。
【代码】
#include <cstdio>
#include <algorithm>
using namespace std;
const int INF=0x3f3f3f3f,N=100010;
int a[N],A,B,f,fA,fB,n;
struct data{int x,y;}d[N],s[N],q[N];
int F(int x){
int ret=(f-fB)*x,l,r,sl,sr,ql,qr;
l=sl=ql=r=1; sr=qr=0;
d[l].x=-INF,d[l].y=x;
for(int i=1;i<=n;i++){
while(l<=r&&i-d[l].x>=A)q[++qr]=d[l++];
while(ql<=qr&&i-q[ql].x>=B)s[++sr]=q[ql++];
int p=a[i];
while(p){
if(sl<=sr){
if(s[sr].y>p)s[sr].y-=p,ret+=p*fB,p=0;
else p-=s[sr].y,ret+=s[sr--].y*fB;
}else if(ql<=qr){
if(q[qr].y>p)q[qr].y-=p,ret+=p*fA,p=0;
else p-=q[qr].y,ret+=q[qr--].y*fA;
}else return INF;
}d[++r].x=i,d[r].y=a[i];
}return ret;
}
int Ternary_Search(int l,int r){
while(1){
if(r-l<=5){
int fx=F(l);
for(int i=l+1;i<=r;i++)fx=min(fx,F(i));
return fx;
}
int x=l+(r-l)/3,y=l+2*(r-l)/3;
int fx=F(x),fy=F(y);
if(fx!=INF&&fx<=fy)r=y;
else l=x;
}return 0;
}
int main(){
while(~scanf("%d%d%d%d%d%d",&n,&A,&B,&fA,&fB,&f)){
if(A>B)swap(A,B),swap(fA,fB);
if(fA<fB)fB=fA;
int l=1,r=0;
for(int i=1;i<=n;i++)scanf("%d",&a[i]),r+=a[i];
printf("%d\n",Ternary_Search(l,r));
}return 0;
}
BZOJ 1229 [USACO2008 Nov]toy 玩具(三分+贪心)的更多相关文章
- BZOJ 1229: [USACO2008 Nov]toy 玩具
BZOJ 1229: [USACO2008 Nov]toy 玩具 标签(空格分隔): OI-BZOJ OI-三分 OI-双端队列 OI-贪心 Time Limit: 10 Sec Memory Lim ...
- Bzoj 1229: [USACO2008 Nov]toy 玩具 题解 三分+贪心
1229: [USACO2008 Nov]toy 玩具 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 338 Solved: 136[Submit] ...
- 【BZOJ】1229 [USACO2008 Nov]toy 玩具
[算法]三分+贪心 [题解] 数据范围小的版本:餐巾计划 这题不是使用最小费用流的下凸函数,因为这题是要满足最大流,那么这题到底在三分什么? 三分的这个函数,其实是总费用随卖出玩具量变化而变化的函数, ...
- BZOJ1229 USACO2008 Nov toy 玩具 【三分+贪心】*
BZOJ1229 USACO2008 Nov toy 玩具 Description 玩具 [Chen Hu, 2006] Bessie的生日快到了, 她希望用D (1 <= D <= 10 ...
- BZOJ_1229_[USACO2008 Nov]toy 玩具_三分+贪心
BZOJ_1229_[USACO2008 Nov]toy 玩具_三分+贪心 Description 玩具 [Chen Hu, 2006] Bessie的生日快到了, 她希望用D (1 <= D ...
- BZOJ1229 & 洛谷2917:[USACO2008 NOV]toy 玩具 & 洛谷4480:[BJWC2018]餐巾计划问题——题解
标题很长emmm…… [USACO2008 NOV]toy 玩具 https://www.luogu.org/problemnew/show/P2917 https://www.lydsy.com/J ...
- BZOJ 1230: [Usaco2008 Nov]lites 开关灯( 线段树 )
线段树.. --------------------------------------------------------------------------------- #include< ...
- BZOJ 1620: [Usaco2008 Nov]Time Management 时间管理( 二分答案 )
二分一下答案就好了... --------------------------------------------------------------------------------------- ...
- BZOJ 1231: [Usaco2008 Nov]mixup2 混乱的奶牛( dp )
状压dp dp( x , S ) 表示最后一个是 x , 当前选的奶牛集合为 S , 则状态转移方程 : dp( x , S ) = Σ dp( i , S - { i } ) ( i ∈ S , ...
随机推荐
- 深入理解 Java 多线程核心知识:跳槽面试必备
多线程相对于其他 Java 知识点来讲,有一定的学习门槛,并且了解起来比较费劲.在平时工作中如若使用不当会出现数据错乱.执行效率低(还不如单线程去运行)或者死锁程序挂掉等等问题,所以掌握了解多线程至关 ...
- Select 使用不当引发的core,你应该知道的
排查一个死机问题,搞了好几天时间,最终确定原因:最终确定问题原因,在此分享一下: 第一步:常规根据core文件查看栈信息,gdb –c core xxxx 如下rip不正确,指令地址错乱,栈信息已破坏 ...
- mysql主从复制、操作语句
授权 grant replication slave on *.* to slave@192.168.10.64 identified by "123456" 登录测试 mysql ...
- spin lock的理解
为什么在spin lock保护的代码里面不允许有休眠的操作呢? 因为spin lock不是空实现的前提下(内核没关抢占,或者是SMP打开),spin lock中是关抢占的,如果一个进程A拿到锁,内核抢 ...
- python基础===新式类与经典类
首先: Python 2.x中默认都是经典类,只有显式继承了object才是新式类 Python 3.x中默认都是新式类,不必显式的继承object 这两种类的区别: 新式类重定义的方法更多,当然这不 ...
- RSA加密解密与加签验签
RSA公钥加密算法是1977年由罗纳德·李维斯特(Ron Rivest).阿迪·萨莫尔(Adi Shamir)和伦纳德·阿德曼(Leonard Adleman)一起提出的.1987年7月首次在美国公布 ...
- 阿里云Centos等更新源设置成阿里源方法。
https://help.aliyun.com/knowledge_detail/5974184.html ---------------------------------------------- ...
- Restful Framework 初识
目录 一.什么是RESTful 二.什么是API 三.RESTful API规范 四.基于Django实现API 五.基于Django Rest Framework框架实现 一. 什么是RESTful ...
- poj 2452(RMQ+二分查找)
题目链接: http://poj.org/problem?id=2452 题意:在区间[1,n]上找到满足 a[i]<a[k]<a[j] (i<=k<=j) 的最大子区间 (j ...
- Decode Ways——动态规划
A message containing letters from A-Z is being encoded to numbers using the following mapping: 'A' - ...