更多文章可以在本人的个人小站:https://kaiserwilheim.github.io 查看。
转载请注明出处。


题目要求我们安排餐巾的清洗分配。

可能是戴森球计划搭产线搭多了吧,这道题我一开始就把餐巾从一个地方到另一个地方(如从餐厅到快洗部)想成了一道流。

我们就可以把餐厅向快洗部和慢洗部连边。

但是呢,我们还需要处理快洗部和慢洗部需要的时间问题,还有处理所有的延时送洗的操作。

我们于是就考虑将每天的餐厅拆成不同的点。
当然,每天的快洗部和慢洗部也需要拆成不同的点。

这样就可以保证我们可以让餐巾进行时间穿梭了,而不再是只局限于一天之内。

还有,我们需要将餐巾进行最大化利用来省钱,毕竟每多存在一块餐巾,就多需要花费我们 ppp 分钱。

我们考虑将拆分后的餐厅继续拆分,拆成一个输入和一个输出。输入代表今天餐厅的餐巾到底是从哪里运过来的,而输出就代表今天使用的餐巾的最终去处。

这时候,我们就已经需要了 4n4n4n 个点了(不包括源点和汇点),其中餐厅输入,餐厅输出,快洗部和慢洗部各 nnn 个点。

但是我们考虑简化一下。

我们考虑省去快洗部和慢洗部,可以看做自己内部员工洗干净了。
这样,我们可以直接连接某一天的输出和另一天的输入了。

最后开始连边。

  1. 源点与餐厅输出连一条容量为当天用量,费用为0的边;
  2. 汇点与餐厅输入连一条容量为当天用量,费用为0的边;
  3. 餐厅输出与下一日的餐厅输出连一条容量为无限,费用为0的边。
  4. 源点与餐厅输入连一条容量为无限,费用为 ppp 的边;
  5. 餐厅输出与 nnn 天后的餐厅输入连一条容量为无限,费用为 sss 的边,代表快洗部;
  6. 餐厅输出与 mmm 天后的餐厅输入连一条容量为无限,费用为 fff 的边,代表慢洗部。

然后跑一个最小费用最大流即可,最终的费用就是答案。

上代码:

#include <bits/stdc++.h>
using namespace std;
#define int long long
const int N = 5010, M = 100010, INF = 1e8;
int n, m, S, T;
int p, x, xp, y, yp;
int need[N];
int s[N];
int h[N], e[M], f[M], w[M], ne[M], idx;
int q[N], d[N], pre[N], incf[N];
bool st[N];void add(int a, int b, int c, int d)
{e[idx] = b, f[idx] = c, w[idx] = d, ne[idx] = h[a]; h[a] = idx++;e[idx] = a, f[idx] = 0, w[idx] = -d, ne[idx] = h[b], h[b] = idx++;
}bool spfa()
{int hh = 0, tt = 1;memset(d, 0x3f, sizeof d);memset(incf, 0, sizeof incf);q[0] = S, d[S] = 0, incf[S] = INF;while(hh != tt){int t = q[hh++];if(hh == N) hh = 0;st[t] = false;for(int i = h[t]; ~i; i = ne[i]){int ver = e[i];if(f[i] && d[ver] > d[t] + w[i]){d[ver] = d[t] + w[i];pre[ver] = i;incf[ver] = min(f[i], incf[t]);if(!st[ver]){q[tt++] = ver;if(tt == N) tt = 0;st[ver] = true;}}}}return incf[T] > 0;
}int EK()
{int cost = 0;while(spfa()){int t = incf[T];cost += t * d[T];for(int i = T; i != S; i = e[pre[i] ^ 1]){f[pre[i]] -= t;f[pre[i] ^ 1] += t;}}return cost;
}signed main()
{scanf("%lld", &n);S = 0, T = n * 2 + 1;memset(h, -1, sizeof h);for(int i = 1; i <= n; i++)scanf("%lld", &need[i]);scanf("%lld%lld%lld%lld%lld", &p, &x, &xp, &y, &yp);for(int i = 1; i <= n; i++){int r = need[i];add(S, i, r, 0);add(n + i, T, r, 0);add(S, n + i, INF, p);if(i < n) add(i, i + 1, INF, 0);if(i + x <= n) add(i, n + i + x, INF, xp);if(i + y <= n) add(i, n + i + y, INF, yp);}printf("%lld\n", EK());return 0;
}

洛谷 P1251 餐巾计划问题 题解相关推荐

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

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

  2. 洛谷 - P1251 餐巾计划问题(最小费用最大流+思维建边)

    题目链接:点击查看 题目大意:给出n天每天所需要的新餐巾的数量,现在有多种方式可以获得新餐巾,问如何运营能使花费最少: 直接购买,花费为cost 将脏餐巾送到快洗部,需要洗t1天,花费为c1 将脏餐巾 ...

  3. 洛谷 P1137 旅行计划 题解

    洛谷 P1137 旅行计划 题解 洛谷 P1137 题目 小明要去一个国家旅游.这个国家有 N N N个城市,编号为1至 N N N,并且有 M M M条道路连接着,小明准备从其中一个城市出发,并只往 ...

  4. 洛谷P1129 [ZJOI2007] 矩阵游戏 题解

    洛谷P1129 [ZJOI2007] 矩阵游戏 题解 题目链接:P1129 [ZJOI2007] 矩阵游戏 题意:给定一张有黑白棋子的正方形棋盘,问存不存在解法使得经过若干次交换行或列的操作后,左上角 ...

  5. 洛谷P3336 [ZJOI2013]话旧 题解

    洛谷P3336 [ZJOI2013]话旧 题解 题目链接:P3336 [ZJOI2013]话旧 题意:小林跟着银河队选手去了一趟宇宙比赛,耳濡目染,变得学术起来.回来后,他发现世界大变样了.比丘兽究级 ...

  6. 洛谷P4683 [IOI2008] Type Printer 题解

    洛谷P4683 [IOI2008] Type Printer 题解 题目链接:P4683 [IOI2008] Type Printer 题意: 你需要利用一台可移动的打印机打印出NNN个单词.这种可移 ...

  7. 洛谷P3647 [APIO2014] 连珠线 题解

    洛谷P3647 [APIO2014] 连珠线 题解 题目链接:P3647 [APIO2014] 连珠线 题意: 在达芬奇时代,有一个流行的儿童游戏称为连珠线.当然,这个游戏是关于珠子和线的.线是红色或 ...

  8. 洛谷P4170 [CQOI2007]涂色 题解

    洛谷P4170 [CQOI2007]涂色 题解 题目链接:P4170 [CQOI2007]涂色 题意: 假设你有一条长度为 555 的木板,初始时没有涂过任何颜色.你希望把它的 555 个单位长度分别 ...

  9. 洛谷P1868 饥饿的奶牛 题解

    洛谷P1868 饥饿的奶牛 题解 题目链接:P1868 饥饿的奶牛 题意: 有一条奶牛冲出了围栏,来到了一处圣地(对于奶牛来说),上面用牛语写着一段文字. 现用汉语翻译为: 有 NNN 个区间,每个区 ...

  10. 洛谷P1462 通往奥格瑞玛的道路 题解

    洛谷P1462 通往奥格瑞玛的道路 题解 题目链接:P1462 通往奥格瑞玛的道路 题意:在艾泽拉斯,有 nnn 个城市.编号为 1,2,3,-,n1,2,3,\ldots,n1,2,3,-,n . ...

最新文章

  1. 智驾汽车MAXIEYE 招聘|SLAM、深度学习、融合、规划控制工程师等岗位(校招/实习)...
  2. VIJOS国庆节模拟赛之繁星春水
  3. 神经网络的分类等位面
  4. 关于优酷开放SDK之setOnCurrentPositionUpdateListener
  5. 组策略链接顺序优先级
  6. 2021-08-15
  7. SpringBoot——项目启动时读取配置及初始化资源
  8. java sleep 精度,java – Thread.sleep(x)是否足以在Android中用作时钟?
  9. 何凯明 Single Image Haze Removal Using Dark Channel Prior
  10. arcpy_intersectmerge
  11. 能在沙漠飞行的翱翔机
  12. 服务器宽带估算及选择
  13. Java爬虫历险记 -- (1)爬取百度首页的logo
  14. MySQL 5.7 安装教程(全步骤、保姆级教程)
  15. 联想ThinkPad打开相机(腾讯会议)是一个锁或相机上有一个斜杠
  16. 抖音一键生成的AI绘画火了,网友惊呼:有点东西
  17. nodejs html 生成图片,使用nodejs将html5 canvas base64编码图片保存为文件
  18. 微信公众号添加自定义菜单
  19. 高中计算机计划,高一信息技术工作计划
  20. VOFM、Copy Control与合并开票 (ZT)

热门文章

  1. Why you should not shrink your data files
  2. 中兴手机数据通道打不开_中兴RRU故障排查指导手册
  3. 论文笔记【WiNCE: Unobtrusive Sensing of Upper Facial Action Units with EOG-based Eyewear】
  4. JavaScript中document的四种方法
  5. U3D常用介绍,搭建一个简单的三维效果
  6. R,L,C,t物理量之间的量纲关系
  7. python续行符是啥_python 续行符
  8. 方正飞鸿中间件大赛落幕 大学生项目获收购
  9. 方正飞鸿智能信息平台产品白皮书(三)
  10. 计算机windows用户名密码怎么查,电脑密码怎么查看? 从零教你查询方式