正题

题目链接:https://www.luogu.com.cn/problem/P4480


题目大意

nnn天,第iii天需要aia_iai​个餐巾。

每个餐巾价格为ppp,使用完后有两种清洗方法

  1. 清洗m1m_1m1​天,费用为c1c_1c1​
  2. 清洗m2m_2m2​天,费用为c2c_2c2​

求满足所有需求的最小花费

1≤n≤2×105,1≤m1,m2≤n,1≤c1,c2,ai≤1001\leq n\leq 2\times 10^5,1\leq m_1,m_2\leq n,1\leq c_1,c_2,a_i\leq 1001≤n≤2×105,1≤m1​,m2​≤n,1≤c1​,c2​,ai​≤100


解题思路

如果固定了购买的毛巾数量那么此题就有一个贪心的做法。

首先先把购买的全部优先使用了

然后如果快的那个洗法费用更低,那么显然全部用快的洗法。

否则就是一个快但是贵,一个慢但是便宜。那么我们的决策就是能用慢的就不使用快的。这个可以用决策后延来解决,当我们需要毛巾的时候再决定前面的毛巾的洗法。

这样的贪心是O(n)O(n)O(n)的,但是我们不能暴力枚举毛巾数量。

感性理解的话不难费用根据毛巾的数量呈一个单谷状,所以我们可以直接三分出这个谷底即可。

时间复杂度O(nlog⁡(100n))O(n\log (100n))O(nlog(100n)),因为dequedequedeque比较慢所以我的标要开-O2\text{-O2}-O2才能过/kk


code

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<queue>
using namespace std;
const int N=2e5+10,inf=2e9;
int n,p,m1,m2,c1,c2,w[N];
struct node{int t,w;node(int tt=0,int ww=0){t=tt;w=ww;return;}
};
deque<node> q1,q2,q3;
int calc(int x){int ans=x*p;q1.clear();q2.clear();q3.clear();for(int i=1;i<=n;i++){while(!q1.empty()&&q1.front().t+m1<=i)q2.push_back(q1.front()),q1.pop_front();while(!q2.empty()&&q2.front().t+m2<=i)q3.push_back(q2.front()),q2.pop_front();int v=w[i],tmp=min(v,x);x-=tmp;v-=tmp;while(v&&!q3.empty()){tmp=min(v,q3.back().w);v-=tmp;ans+=tmp*c2;if(tmp==q3.back().w)q3.pop_back();else q3.back().w-=tmp;}while(v&&!q2.empty()){tmp=min(v,q2.back().w);v-=tmp;ans+=tmp*c1;if(tmp==q2.back().w)q2.pop_back();else q2.back().w-=tmp;}if(v)return inf;q1.push_back(node(i,w[i]));}return ans;
}
int main()
{scanf("%d%d%d%d%d%d",&n,&m1,&m2,&c1,&c2,&p);if(m1>m2)swap(m1,m2),swap(c1,c2);if(c1<c2)c2=c1,m2=m1;for(int i=1;i<=n;i++)scanf("%d",&w[i]);int l=1,r=n*100;while(l<=r){int mid=(l+r)>>1;if(calc(mid)<calc(mid+1))r=mid-1;else l=mid+1;}printf("%d\n",calc(l));return 0;
}

P4480-[BJWC2018]餐巾计划问题【三分,贪心】相关推荐

  1. 洛谷P4480 【[BJWC2018]餐巾计划问题】

    这道题和网络流 \(24\) 题中的餐巾计划的确不一样, \([\) \(BJWC\) \(2018\) \(]\) 餐巾计划问题的数据范围更大. 一个餐厅在相继的 \(n\) 天里,每天需用的餐巾数 ...

  2. 初识费用流 模板(spfa+slf优化) 餐巾计划问题

    今天学习了最小费用最大流,是网络流算法之一.可以对于一个每条边有一个容量和一个费用(即每单位流的消耗)的图指定一个源点和汇点,求在从源点到汇点的流量最大的前提下的最小费用. 这里讲一种最基础也是最好掌 ...

  3. 【网络流24题】餐巾计划问题(最小费用最大流)

    [网络流24题]餐巾计划问题(最小费用最大流) 题面 COGS 洛谷上的数据范围更大,而且要开longlong 题解 餐巾的来源分为两种: ①新买的 ②旧的拿去洗 所以,两种情况分别建图 先考虑第一种 ...

  4. 【三分/贪心/数学】装备合成

    [三分/贪心]装备合成 题目 题目链接 思路 设方案一A次,方案二B次 2 A + 4 B < = X 2A+4B<=X 2A+4B<=X 3 A + B < = Y 3A+B ...

  5. 餐巾计划问题 线性规划与网络流24题之10 费用流

    相关知识:最小费用(最大)流 问题描述: 一个餐厅在相继的N 天里, 每天需用的餐巾数不尽相同. 假设第i天需要ri块餐巾(i=1, 2,-,N).餐厅可以购买新的餐巾,每块餐巾的费用为p分:或者把旧 ...

  6. 网络流24题 餐巾计划(DCOJ8008)

    题目描述 一个餐厅在相继的 n nn 天里,每天需用的餐巾数不尽相同.假设第 i ii 天需要 ri r_ir​i​​ 块餐巾.餐厅可以购买新的餐巾,每块餐巾的费用为 P PP 分:或者把旧餐巾送到快 ...

  7. 洛谷P1251 餐巾计划问题 无汇源最小费用流

    题目描述 一个餐厅在相继的 NN 天里,每天需用的餐巾数不尽相同.假设第 ii 天需要 r_iri​块餐巾( i=1,2,...,N).餐厅可以购买新的餐巾,每块餐巾的费用为 pp 分;或者把旧餐巾送 ...

  8. 423世界读书日 | 今年的阅读计划完成三分之一了吗?

    草长莺飞四月天,正是读书好时节 你有多久没在茶余饭后,安静地读书了? 年初制定的阅读计划,完成三分之一了吗? 423 世界读书日 一起来阅读吧! 01 书籍推荐 RECOMMEND 推荐指数: 作者: ...

  9. 费用流 ---- P1251 餐巾计划问题[拆点](网络流24题)

    题目链接 题目大意: 解题思路 将脏餐巾以f元/条送到快洗部,过m天后,干净餐巾送回来使用 将脏餐巾以s元/条送到慢洗部,过n天后,干净餐巾送回来使用 延期送洗(可能会出现之后餐巾需求过少,并不需要所 ...

最新文章

  1. 从Excel中导入数据时,提示“未在本地计算机上注册“Microsoft.ACE.OLEDB.12.0”提供程序”的解决办法...
  2. python基础知识整理-Python3基础知识(一)
  3. AtCoder AGC036E ABC String
  4. exe文件添加为服务
  5. MySQL 处理海量数据时的一些优化查询速度方法
  6. 工具-eclipse-hibernate关于快速生成*.hbm.xml文件,与bean文件的操作,不使用hibernate tool解决办法之一,主要为了快速开发,写的小工具
  7. [BUUCTF-pwn]——suctf_2018_stack
  8. 怎么查看蓝牙uuid_多设备低功耗蓝牙 Swarm BLE in Android and iOS
  9. linux adb 端口,linux 无法连接adb 设备
  10. php 常用正则运算
  11. mysql中定时任务_mysql中定时任务的用法
  12. Linux下C 更改字符在终端的显示颜色
  13. 32位64位Eclipse和jdk对应关系
  14. Mysql 时间格式默认空串 ‘0000-00-00 00:00:00‘ select抛出异常的解决方法
  15. 在龙芯1c上使用rt-thread统一标准的spi接口
  16. php 输入经纬度查询位置,根据经纬度查询附近地点信息
  17. 3.9 Primitive Obsession 基本类型偏执
  18. 算24点的一般方法及例题
  19. 阿里云大数据ACA考点总结
  20. 有关三年级计算机课的日记,今天的自习课三年级日记

热门文章

  1. mysql 碎片率_MySQL数据碎片的整理和分析
  2. fcn网络训练代码_另辟蹊径,中科院自动化所等首次用图卷积网络解决语义分割难题...
  3. c语言查单词小程序,【附源码】小程序初窥之简单查单词
  4. 9050 端口 linux 进程,windows和linux查看端口占用情况
  5. java 数组 树_java使用顺序数组实现二叉树
  6. 错误代码1500什么意思_啊早安打工人是什么梗???
  7. 图的遍历(C语言,邻接表存储的图 - DFS,邻接矩阵存储的图 - BFS)
  8. [Java基础]Lambda表达式的注意事项
  9. 《C++ Primer》7.1.4节练习
  10. 2018 蓝桥杯省赛 B 组模拟赛(一) 封印之门+最短路径之Floyd