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 , ...
随机推荐
- el-date-picker 日期格式化 yyyy-MM-dd
<el-date-picker format="yyyy-MM-dd" v-model="dateValue" type="date" ...
- Python阶段复习 - part 4 - 用户登录程序
简易版: #!/usr/bin/env python # _*_ coding:UTF-8 _*_ # __auth__:Dahlhin import sys userinfo = r'userinf ...
- telnet如何保存输出内容到本地
telnet如何保存输出内容到本地 http://bbs.csdn.net/topics/391023327 一种将程序的标准输出重定向到telnet终端的方法 http://blog.chinaun ...
- c++设计模式系列----单例模式(Singleton模式
单例模式是为了解决唯一对象实例问题而提出来的,许多时候整个系统只需要拥有一个全局对象,这样有利于我们协调系统整体的行为.比如在某个服务器程序中,该服务器的配置信息存放在一个文件中,这些配置数据由一个单 ...
- Hadoop-MR[会用]MR程序的运行模式
1.简介 现在很少用到使用MR计算框架来实现功能,通常的做法是使用hive等工具辅助完成.但是对于其底层MR的原理还是有必要做一些了解. 2.MR客户端程序实现套路 这一小节总结归纳编写mr客户端程序 ...
- python--tesseract
tesseract的介绍 我们爬虫会受到阻碍,其中一个便是我们在模拟登陆或者请求一些数据的时候,出现的图形验证码,因此我们需要一种能叫图形验证码识别成文本的技术.将图片翻译成文字一般称为光学文字识别( ...
- thinkphp模板常用的方法
thinkphp模板我是看了3.2的文档,对里面的东西过了一遍,然后在写到需要用到模板的东西的时候就有印象,有的能直接回顾,但是有的就可能只知道有这个东西,但是不知道怎么用,所以就重新查手册,这个的话 ...
- vue的data用到this问题
问题:在vue中用vue-awesome-swiper,在data中初始化,用到swiper一个方法onTap,然后再调vue的一个函数,用到this,可是... data() { return { ...
- MYSQL中INET_ATON()函数
例如我们现在要在一个表中查出 ip 在 192.168.1.3 到 192.168.1.20 之间的 ip 地址,我们首先想到的就是通过字符串的比较来获取查找结果,但是如果我们通过这种方式来查找,结果 ...
- mybatis多表查询,自动生成id
主要是在配置文件中,配置好所要包含的字段. 类关系:account----role,1对1 account包含role类 java类: public class Account{ private In ...