【题木链接】 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 玩具(三分+贪心)的更多相关文章

  1. BZOJ 1229: [USACO2008 Nov]toy 玩具

    BZOJ 1229: [USACO2008 Nov]toy 玩具 标签(空格分隔): OI-BZOJ OI-三分 OI-双端队列 OI-贪心 Time Limit: 10 Sec Memory Lim ...

  2. Bzoj 1229: [USACO2008 Nov]toy 玩具 题解 三分+贪心

    1229: [USACO2008 Nov]toy 玩具 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 338  Solved: 136[Submit] ...

  3. 【BZOJ】1229 [USACO2008 Nov]toy 玩具

    [算法]三分+贪心 [题解] 数据范围小的版本:餐巾计划 这题不是使用最小费用流的下凸函数,因为这题是要满足最大流,那么这题到底在三分什么? 三分的这个函数,其实是总费用随卖出玩具量变化而变化的函数, ...

  4. BZOJ1229 USACO2008 Nov toy 玩具 【三分+贪心】*

    BZOJ1229 USACO2008 Nov toy 玩具 Description 玩具 [Chen Hu, 2006] Bessie的生日快到了, 她希望用D (1 <= D <= 10 ...

  5. BZOJ_1229_[USACO2008 Nov]toy 玩具_三分+贪心

    BZOJ_1229_[USACO2008 Nov]toy 玩具_三分+贪心 Description 玩具 [Chen Hu, 2006] Bessie的生日快到了, 她希望用D (1 <= D ...

  6. BZOJ1229 & 洛谷2917:[USACO2008 NOV]toy 玩具 & 洛谷4480:[BJWC2018]餐巾计划问题——题解

    标题很长emmm…… [USACO2008 NOV]toy 玩具 https://www.luogu.org/problemnew/show/P2917 https://www.lydsy.com/J ...

  7. BZOJ 1230: [Usaco2008 Nov]lites 开关灯( 线段树 )

    线段树.. --------------------------------------------------------------------------------- #include< ...

  8. BZOJ 1620: [Usaco2008 Nov]Time Management 时间管理( 二分答案 )

    二分一下答案就好了... --------------------------------------------------------------------------------------- ...

  9. BZOJ 1231: [Usaco2008 Nov]mixup2 混乱的奶牛( dp )

    状压dp dp( x , S ) 表示最后一个是 x , 当前选的奶牛集合为 S , 则状态转移方程 : dp( x , S ) =  Σ dp( i , S - { i } )  ( i ∈ S , ...

随机推荐

  1. 将文件内容导入到MySQL中

    1.作用 把文件系统的内容导入到数据库中 2.语法 load data infile "文件名" into table 表名 fields terminated by " ...

  2. div+css实现表头固定内容滚动表格

    <div class="m-demo"> <table> <thead> <tr><th>定宽a</th>& ...

  3. vue页面高度填充,不出现滚动条

    现在的需求是这样:vue单页工程化开发,上面有一个header,左边有一个侧边栏,右边内容展示.要求左边侧边栏的高度,要填充满整个页面(除了header外,header:height:60px)--如 ...

  4. Leetcode 之Evaluate Reverse Polish Notation(41)

    很简单的一道题,定义一个栈保留操作数,遇操作符则弹出运算即可. bool isOperator(string &op) { //注意用法 && string("+-* ...

  5. java中的构造方法与其作用

    什么是构造方法呢? 方法名和类名相同 没有返回值类型,连void都不能写 没有具体的返回值 构造方法分为无参构造方法与有参构造方法. 先来看一下最简单的无参构造方法: Student.java pac ...

  6. python_迭代器和生成器

    迭代器和生成器 1.迭代器 特点: 访问者不需要关心迭代器内部的结构,仅需通过next()方法不断去取下一个内容 不能随机访问集合中的某个值 ,只能从头到尾依次访问 访问到一半时不能往回退 便于循环比 ...

  7. MySQL索引基础知识点

    什么是索引 索引类似于书本目录,是数据库存储引擎维护的用于快速查找到记录的一种数据结构,它是对查询性能优化的最有效手段. MySQL索引是在存储引擎层而不是服务器层实现的,不同存储引擎的索引工作方式也 ...

  8. 《深入浅出MyBatis技术原理与实战》——6. MyBatis的解析和运行原理

    MyBatis的运行分为两大部分,第一部分是读取配置文件缓存到Configuration对象,用以创建SqlSessionFactory,第二部分是SqlSession的执行过程. 6.1 涉及的技术 ...

  9. 提高C#编程水平的50个要诀

    一篇旧时的文章,看后觉得还可以,特别贴出来. 提高C#编程水平的50个要点: .总是用属性 (Property) 来代替可访问的数据成员 .在 readonly 和 const 之间,优先使用 rea ...

  10. 一、python基础相关知识体系

    python基础 a. Python(解释型语言.弱类型语言)和其他语言的区别? 一.编译型语言:一次性,将全部的程序编译成二进制文件,然后在运行.(c,c++ ,go) 运行速度快.开发效率低 二. ...