bzoj5164: 餐厅计划问题(三分+贪心)
网络流经典题里餐巾计划的加强版...天数变成了$10^5$,那就不能用费用流做了...
考虑费用流的时候,单位费用随流量的增加而减少,也就是说费用其实是个单峰(下凸)函数。
那么可以三分要买的餐巾个数,求费用可以用贪心。
新买的没用就用新买的,否则能慢洗的慢洗,不能慢洗的拿最晚的快洗后可以当天用的去快洗。
有一个错误的贪心是慢洗和快洗的都拿最早的,这样可能会导致快洗的本来可以洗时间更晚一些的,却洗了比较早的餐巾,而这些餐巾本可以在接下来的一天里通过慢洗来省下更多的钱。
#include<iostream>
#include<cstring>
#include<cstdlib>
#include<cstdio>
#include<algorithm>
#define ll long long
using namespace std;
const int maxn=, inf=1e9;
struct poi{int tim, rest;}q1[maxn], q2[maxn], q3[maxn];
int d, n1, n2, c1, c2, tc, ans=inf;
int t[maxn];
inline void read(int &k)
{
int f=; k=; char c=getchar();
while(c<'' || c>'') c=='-'&&(f=-), c=getchar();
while(c<='' && c>='') k=k*+c-'', c=getchar();
k*=f;
}
inline int f(int x)
{
int ans=(tc-c2)*x;
int l1, r1, l2, r2, l3, r3;
l1=l2=l3=r1=; r2=r3=;
q1[].tim=-inf; q1[].rest=x;
for(int i=;i<=d;i++)
{
while(l1<=r1 && q1[l1].tim+n1<=i) q2[++r2]=q1[l1++];
while(l2<=r2 && q2[l2].tim+n2<=i) q3[++r3]=q2[l2++];
int rest=t[i];
while(rest)
{
if(l3<=r3)
{
if(q3[r3].rest>=rest) q3[r3].rest-=rest, ans+=rest*c2, rest=;
else ans+=q3[r3].rest*c2, rest-=q3[r3--].rest;
}
else if(l2<=r2)
{
if(q2[r2].rest>=rest) q2[r2].rest-=rest, ans+=rest*c1, rest=;
else ans+=q2[r2].rest*c1, rest-=q2[r2--].rest;
}
else return inf;
}
q1[++r1].tim=i; q1[r1].rest=t[i];
}
return ans;
}
int main()
{
read(d); read(n1); read(n2); read(c1); read(c2); read(tc);
int l=, r=;
for(int i=;i<=d;i++) read(t[i]), r+=t[i];
if(n1>n2) swap(n1, n2), swap(c1, c2);
if(c1<c2) n2=n1, c2=c1;
while(r-l>)
{
int mid1=l+(r-l)/, mid2=l+(r-l)*/;
if(f(mid1)==inf || f(mid1)>f(mid2)) l=mid1;
else r=mid2;
}
for(int i=l;i<=r;i++) ans=min(ans, f(i));
printf("%d\n", ans);
}
bzoj5164: 餐厅计划问题(三分+贪心)的更多相关文章
- BZOJ_1229_[USACO2008 Nov]toy 玩具_三分+贪心
BZOJ_1229_[USACO2008 Nov]toy 玩具_三分+贪心 Description 玩具 [Chen Hu, 2006] Bessie的生日快到了, 她希望用D (1 <= D ...
- 【题解】CF1056F Write the Contest(三分+贪心+DP)
[题解]CF1056F Write the Contest(三分+贪心+DP) 最优化问题的三个解决方法都套在一个题里了,真牛逼 最优解应该是怎样的,一定存在一种最优解是先完成了耗时长的任务再干别的( ...
- Bzoj 3874: [Ahoi2014&Jsoi2014]宅男计划 三分+贪心
3874: [Ahoi2014&Jsoi2014]宅男计划 Time Limit: 1 Sec Memory Limit: 256 MBSubmit: 861 Solved: 336[Su ...
- P4480-[BJWC2018]餐巾计划问题【三分,贪心】
正题 题目链接:https://www.luogu.com.cn/problem/P4480 题目大意 \(n\)天,第\(i\)天需要\(a_i\)个餐巾. 每个餐巾价格为\(p\),使用完后有两种 ...
- BZOJ4868 [Shoi2017]期末考试 【三分 + 贪心】
题目链接 BZOJ4868 题解 最后的答案决定于最后一个公布的成绩 显然这个是答案关于这个时间点是呈凸单调的 三分一下这个时间点 时间点固定,在这个时间前的人都会产生不愉快度,在这个时间前的科目可以 ...
- BZOJ1229 USACO2008 Nov toy 玩具 【三分+贪心】*
BZOJ1229 USACO2008 Nov toy 玩具 Description 玩具 [Chen Hu, 2006] Bessie的生日快到了, 她希望用D (1 <= D <= 10 ...
- 【BZOJ4868】期末考试 [三分][贪心]
期末考试 Time Limit: 20 Sec Memory Limit: 512 MB[Submit][Status][Discuss] Description Input Output Samp ...
- BZOJ 1229 [USACO2008 Nov]toy 玩具(三分+贪心)
[题木链接] http://www.lydsy.com/JudgeOnline/problem.php?id=1229 [题目大意] 每天对玩具都有一定的需求ni,每天可以花f价值每条购买玩具, 当天 ...
- 【CCPC-Wannafly Winter Camp Day4 (Div1) I】咆咆咆哮(三分+贪心)
点此看题面 大致题意: 有\(n\)张卡牌,每张卡牌有两种用法:使场上增加一个伤害为\(a_i\)的生物,或使场上所有生物伤害增加\(b_i\).求最大总伤害. 三分 我们可以三分使用\(a_i\)的 ...
随机推荐
- 在testbench从文件读入激励
在验证verilog逻辑模块功能时候,我们可以从文件中读入激励,便于大规模的验证.文件中的数据我们可以用c++编写程序产生. 第一种读入文件的方法是用系统函数:$readmemb, readmemh, ...
- kettle学习笔记(九)——子转换、集群与变量
一.概述 kettle中3个重要的步骤: 子转换/映射 在转换里调用一个子转换,便于封装和重用. 集群 集群模式 变量和参数 变量和参数的用法 二.子转换 1.定义子转换 主要由映射输入与映射输出定义 ...
- 大数据入门第二十四天——SparkStreaming(二)与flume、kafka整合
前一篇中数据源采用的是从一个socket中拿数据,有点属于“旁门左道”,正经的是从kafka等消息队列中拿数据! 主要支持的source,由官网得知如下: 获取数据的形式包括推送push和拉取pull ...
- [SPOJ2939]Qtree5
[SPOJ2939]Qtree5 Tags:题解 题意 链接 给你\(n\)个节点的黑白树,初始全黑.每次可以翻转某点颜色,或查询距离某点最近的白点的距离.\(n\le 10^5\).强制LCT,不准 ...
- 【Java框架型项目从入门到装逼】第十三节 用户新增功能完结篇
这一节,我们把用户新增的功能继续做一个完善.首先,新增成功后,需要给前台返回一个信息,就是告诉浏览器,这次用户新增的操作到底是成功了呢,还是失败了呢?为此,我们需要专门引入一个结果类,里面只有两个属性 ...
- 汇编 cdecl 函数调用约定,stdcall 函数调用约定
知识点: cdecl 函数调用约定 stdcall 函数调用约定 CALL堆栈平衡 配置属性--> c/c++ -->高级-->调用约定 一.cdecl调用约定 VC++ ...
- HDU 6333 Harvest of Apples (分块、数论)
题目连接:Harvest of Apples 题意:给出一个n和m,求C(0,n)+C(1,n)+.....+C(m,n).(样例组数为1e5) 题解:首先先把阶乘和逆元预处理出来,这样就可O(1)将 ...
- (功能篇)回顾Bug管理系统Mantis优化改造经历
共分为两篇,功能篇和技术篇. 时间大约是2016年冬天. 考虑搭一个用于Bug管理和追踪的系统. 综合比较下,选择了小巧的开源工具,Mantis. 在源码基础上,做代码修改,完成了定制版的优化改造. ...
- 173. Insertion Sort List【LintCode by java】
Description Sort a linked list using insertion sort. Example Given 1->3->2->0->null, ret ...
- Linux内核分析第二周学习笔记
linux内核分析第二周学习笔记 标签(空格分隔): 20135328陈都 陈都 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.co ...