LOJ #6008. 「网络流 24 题」餐巾计划
#6008. 「网络流 24 题」餐巾计划
题目描述
一个餐厅在相继的 n nn 天里,每天需用的餐巾数不尽相同。假设第 i ii 天需要 ri r_iri 块餐巾。餐厅可以购买新的餐巾,每块餐巾的费用为 P PP 分;或者把旧餐巾送到快洗部,洗一块需 M MM天,其费用为 F FF 分;或者送到慢洗部,洗一块需 N NN 天,其费用为 S SS 分(S<F S < FS<F)。
每天结束时,餐厅必须决定将多少块脏的餐巾送到快洗部,多少块餐巾送到慢洗部,以及多少块保存起来延期送洗。但是每天洗好的餐巾和购买的新餐巾数之和,要满足当天的需求量。
试设计一个算法为餐厅合理地安排好 n nn 天中餐巾使用计划,使总的花费最小。
输入格式
第 1 11 行有 6 66 个正整数 n nn、P PP、M MM、F FF、N NN、S SS。
n nn 是要安排餐巾使用计划的天数,P PP 是每块新餐巾的费用,M MM 是快洗部洗一块餐巾需用天数,F FF 是快洗部洗一块餐巾需要的费用,N NN 是慢洗部洗一块餐巾需用天数,S SS 是慢洗部洗一块餐巾需要的费用。
接下来的 n nn 行是餐厅在相继的 n nn 天里,每天需用的餐巾数。
输出格式
输出餐厅在相继的 n nn 天里使用餐巾的最小总花费。
样例
样例输入
3 10 2 3 3 2
5
6
7
样例输出
145
数据范围与提示
1≤n≤1000 1 \leq n \leq 10001≤n≤1000
code
#include<cstdio>
#include<algorithm>
#include<cstring> using namespace std;
const int N = ;
const int INF = 1e9; struct Edge{
int u,v,f,c,nxt;
Edge(){}
Edge(int a,int b,int flow,int cost,int nt) { //-
u = a;v = b;f = flow;c = cost;nxt = nt;
}
}e[];
int head[N],dis[N],q[],pre[N];
bool vis[N];
int L,R,S,T,tot = ,Mc,Mf; inline char nc() {
static char buf[],*p1 = buf,*p2 = buf;
return p1==p2&&(p2=(p1=buf)+fread(buf,,,stdin),p1==p2)?EOF:*p1++;
}
int read() {
int x = ,f = ;char ch = nc();
for (; ch<''||ch>''; ch=nc()) if (ch=='-')f=-;
for (; ch>=''&&ch<=''; ch=nc()) x=x*+ch-'';
return x*f;
}
void add_edge(int u,int v,int f,int c) {
e[++tot] = Edge(u,v,f,c,head[u]);head[u] = tot;
e[++tot] = Edge(v,u,,-c,head[v]);head[v] = tot;
}
bool spfa() {
for (int i=; i<=T; ++i) vis[i]=false,dis[i]=INF;
L = ;R = ;
dis[S] = ;
q[++R] = S;vis[S] = true;pre[S] = ;
while (L <= R) {
int u = q[L++];
for (int i=head[u]; i; i=e[i].nxt) {
int v = e[i].v;
if (dis[v]>dis[u]+e[i].c && e[i].f > ) {
dis[v] = dis[u] + e[i].c;
pre[v] = i;
if (!vis[v]) q[++R] = v,vis[v] = true;
}
}
vis[u] = false;
}
return dis[T]!=INF;
}
void mcf() {
int zf = INF;
for (int i=T; i!=S; i=e[pre[i]].u)
zf = min(zf,e[pre[i]].f);
for (int i=T; i!=S; i=e[pre[i]].u)
e[pre[i]].f -= zf,e[pre[i]^].f += zf;
Mf += zf;Mc += dis[T]*zf;
}
int main() {
int n = read(),c = read(),kt = read(),kc = read(),mt = read(),mc = read();
S = n*+;T = n*+;
for (int t,i=; i<=n; ++i) {
t = read();
add_edge(S,i,t,);
add_edge(i+n,T,t,);
add_edge(S,i+n,INF,c);
if (i+kt<=n) add_edge(i,i+n+kt,INF,kc);
if (i+mt<=n) add_edge(i,i+n+mt,INF,mc);
if (i+<=n) add_edge(i,i+,INF,);
}
while (spfa()) mcf();
printf("%d",Mc);
return ;
}
LOJ #6008. 「网络流 24 题」餐巾计划的更多相关文章
- [luogu_P1251][LOJ#6008]「网络流 24 题」餐巾计划
[luogu_P1251][LOJ#6008]「网络流 24 题」餐巾计划 试题描述 一个餐厅在相继的 \(N\) 天里,第 \(i\) 天需要 \(R_i\) 块餐巾 \((i=l,2,-,N)\) ...
- 【刷题】LOJ 6008 「网络流 24 题」餐巾计划
题目描述 一个餐厅在相继的 \(n\) 天里,每天需用的餐巾数不尽相同.假设第 \(i\) 天需要 \(r_i\) 块餐巾.餐厅可以购买新的餐巾,每块餐巾的费用为 \(P\) 分:或者把旧餐巾送到快洗 ...
- LibreOJ #6008. 「网络流 24 题」餐巾计划 最小费用最大流 建图
#6008. 「网络流 24 题」餐巾计划 内存限制:256 MiB时间限制:1000 ms标准输入输出 题目类型:传统评测方式:文本比较 上传者: 匿名 提交提交记录统计讨论测试数据 题目描述 ...
- Libre 6008 「网络流 24 题」餐巾计划 (网络流,最小费用最大流)
Libre 6008 「网络流 24 题」餐巾计划 (网络流,最小费用最大流) Description 一个餐厅在相继的N天里,第i天需要Ri块餐巾(i=l,2,-,N).餐厅可以从三种途径获得餐巾. ...
- LibreOJ #6008. 「网络流 24 题」餐巾计划
这道题其实我在刚学 OI 的时候就在一本通上看见过,还记得上面写着"新餐巾一次性买完"之类的话.当时还很稚嫩(现在也是),想了好久,根本想不出来. 学了网络流之后发现这道题的图也是 ...
- 【刷题】LOJ 6227 「网络流 24 题」最长k可重线段集问题
题目描述 给定平面 \(\text{xoy}\) 上 \(n\) 个开线段组成的集合 \(\text{I}\) ,和一个正整数 \(k\) ,试设计一个算法. 从开线段集合 \(\text{I}\) ...
- [LOJ#6002]「网络流 24 题」最小路径覆盖
[LOJ#6002]「网络流 24 题」最小路径覆盖 试题描述 给定有向图 G=(V,E).设 P 是 G 的一个简单路(顶点不相交)的集合.如果 V 中每个顶点恰好在 P 的一条路上,则称 P 是 ...
- loj #6014. 「网络流 24 题」最长 k 可重区间集
#6014. 「网络流 24 题」最长 k 可重区间集 题目描述 给定实直线 L LL 上 n nn 个开区间组成的集合 I II,和一个正整数 k kk,试设计一个算法,从开区间集合 I II 中选 ...
- loj #6013. 「网络流 24 题」负载平衡
#6013. 「网络流 24 题」负载平衡 题目描述 G 公司有 n nn 个沿铁路运输线环形排列的仓库,每个仓库存储的货物数量不等.如何用最少搬运量可以使 n nn 个仓库的库存数量相同.搬运货物时 ...
随机推荐
- 数学建模大赛-NO.1
数学建模大赛-NO.1 论文精析 近期,在网上各种的收罗,张开了各式各样的捕抓.哈哈… .终于,在一个不经意之间发现了一个巨大无比的宝藏式的网站,此网站网址为:http://cjsxjm.gzsi ...
- Google地址
Google的访问一直很不稳定,经常被墙,无意间发现以下一些地址,特此记录. https://g.ttlsa.com/ https://wen.lu/ http://sinaapp.co https: ...
- php-7.1.11编译选项配置
./configure \ --prefix=/usr/local/php-7.1.11 \ --with-config-file-path=/usr/local/php7.1.11/etc \ -- ...
- Node.js | 你的物联网系统,有个管家待认领
很多时候,专业的事情都要交给专业的人来做,才会更放心. 例如买了套房,交房装修完毕,欢天喜地入住后,房子的日常养护和维护之类的事情,都由谁来负责呢? 物业呗~买了房子就自然需要房子所在小区提供的物业服 ...
- pta编程题19 Saving James Bond 2
其它pta数据结构编程题请参见:pta 题目 和简单版本不同的是,简单版本只需判断能否到达岸边,而这个版本要求求出最少跳数的路径. 简单版本用dfs实现,而这道题用BFS实现. 注意: 岛半径为7.5 ...
- IOS segue(跳转页面处理)
● Storyboard上每一根用来界面跳转的线,都是一个UIStoryboardSegue对象(简称Segue) Segue的属性 ● 每一个Segue对象,都有3个属性 ➢ 唯一标识 @prope ...
- void (*signal(int sig, void (*func) (int))) (int)理解
http://blog.csdn.net/sever2012/article/details/8281271 1.signal( int sig, void (*func)(int))signal是一 ...
- python request下载文件时,显示进度以及网速
import requests import time def downloadFile(name, url): headers = {'Proxy-Connection':'keep-alive'} ...
- java 字符串中是否有数字
http://www.cnblogs.com/zhangj95/p/4198822.html http://www.cnblogs.com/sunzn/archive/2013/07/12/31865 ...
- 漫谈Ajax在.Net中的使用
引用地址:http://birdshover.cnblogs.com/archive/2006/07/03/441439.html AJAX出来的时间也不短了.虽然它在某些方面很受争议,但是瑕不掩瑜. ...