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 , ...
随机推荐
- 记一次Powershell反混淆 (1)
样本地址: https://www.virustotal.com/#/file/6f9034646e6fcead5342f708031412e3c2efdb4fb0f37bba43133a471d1c ...
- Linux线程基础函数
1. 线程标识: (1) 比较两个线程ID: #include <pthread.h> int pthread_equal(pthread_t tid1, pthread_t tid2); ...
- python科学计算整理
网站: http://bokeh.pydata.org/gallery.html
- Linux 入门记录:二十、Linux 包管理工具 YUM
一.YUM(Yellowdog Updater, Modified) 1. YUM 简介 RPM 软件包形式管理软件虽然方便,但是需要手动解决软件包的依赖问题.很多时候安装一个软件首先需要安装 1 个 ...
- 【uva10779】收集者的难题
按照题意建模就行了. #include<bits/stdc++.h> #define naive 0 #define inf 1000000007 using namespace std; ...
- mui 选项卡与header文字同步
mui底部tab固定 头部nav可变 <!DOCTYPE html> <html> <head> <meta charset="utf-8" ...
- Mac下使用brew搭建PHP7+nginx+mysql开发环境
http://blog.csdn.net/mysteryhaohao/article/details/52230634 HomeBrew brew的安装,直接上官网:http://brew.sh/ 一 ...
- linux命令--head
head 与 tail 就像它的名字一样的浅显易懂,它是用来显示开头或结尾某个数量的文字区块,head 用来显示档案的开头至标准输出中,而 tail 想当然尔就是看档案的结尾. 具体使用参考链接: h ...
- FineReport——FS
FR除了能够实现对报表等的二次开发,还能实现对决策系统的操作: FS.Trans.signOut() 退出决策平台系统 FS.tabPane._doCloseTab(FS.tabPane._getSe ...
- DateTimeToUnix/UnixToDateTime 对接时间转换
问题,通过毫秒数来解析出时间:(很多对接的时候经常需要用到) <?php $MyJson = '{"jingdong_vas_subscribe_get_responce": ...