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 , ...
随机推荐
- 密码本(无bug版)
main.cpp #include <stdio.h> #include <stdlib.h> #include "data.h" #include &qu ...
- bzoj 2258 splay
类似于1014,用splay维护这个序列,维护每个节点为根的子树的hash值,对于一个询问二分答案判断就行了. 反思:询问的时候因为是原序列的x,y,所以开始的时候直接splay(x-1)了,后来发现 ...
- 函数getopt()及其参数optind -- (转)
getopt被用来解析命令行选项参数 #include <unistd.h> extern char *optarg; //选项的参数指针 extern int ...
- jeecg3.7中弹出窗操作标签dgOpenOpt的用法
1.基本参数 参数名 描述 url 弹出页面地址 title ...
- 【转】debian下的update-rc.d的使用
在Linux系统下,一个Services的启动.停止以及重启通常是通过/etc/init.d目录下的脚本来控制的.然而,在启动或改变运行级别时, 是在/etc/rcX.d中来搜索脚本.其中X是运行级别 ...
- linux安装lamp
github https://github.com/zblogcn/zblogphp Installation If your server system: CentOS yum -y install ...
- Django rest framework 权限操作(源码分析)
知识回顾http://www.cnblogs.com/ctztake/p/8419059.html 这一篇是基于上一篇写的,上一篇谢了认证的具体流程,看懂了上一篇这一篇才能看懂, 当用户访问是 首先执 ...
- 图论-最小生成树-Kruskal算法
有关概念: 最小生成树:在连通图G中,连接图G所有顶点且总权最小的边构成的树 思路: 首先对边按权从小到大排序,紧接着枚举每一条边,如果两个结点的祖先结点不同(并查集),则连上此边,直到边数等于结点数 ...
- scrapy抓取学院新闻报告
抓取四川大学公共管理学院官网(http://ggglxy.scu.edu.cn)所有的新闻咨询. 实验流程 1.确定抓取目标.2.制定抓取规则.3.'编写/调试'抓取规则.4.获得抓取数据 1.确定抓 ...
- AspxGridView在cell内显示颜色
protected void master_HtmlDataCellPrepared(object sender, ASPxGridViewTableDataCellEventArgs e) { if ...