[网络流24题]餐巾(cogs 461)
【问题描述】
一个餐厅在相继的N天里,第i天需要Ri块餐巾(i=l,2,…,N)。餐厅可以从三种途径获得餐巾。
(1)购买新的餐巾,每块需p分;
(2)把用过的餐巾送到快洗部,洗一块需m天,费用需f分(f<p)。如m=l时,第一天送到快洗部的餐巾第二天就可以使用了,送慢洗的情况也如此。
(3)把餐巾送到慢洗部,洗一块需n天(n>m),费用需s分(s<f)。
在每天结束时,餐厅必须决定多少块用过的餐巾送到快洗部,多少块送慢洗部。在每天开始时,餐厅必须决定是否购买新餐巾及多少,使洗好的和新购的餐巾之和满足当天的需求量Ri,并使N天总的费用最小。
【输入】
输入文件共 3 行,第 1 行为总天数;第 2 行为每天所需的餐巾块数;第 3 行为每块餐巾的新购费用 p ,快洗所需天数 m ,快洗所需费用 f ,慢洗所需天数 n ,慢洗所需费用 s 。
【输出】
一行,最小的费用
【样例】
napkin.in
3
3 2 4
10 1 6 2 3
napkin.out
64
【数据规模】
n<=200,Ri<=50
- /*
- 这个题很神奇的是把一个点拆成旧餐巾和新餐巾(不知道那些dalao怎么想出来的)。
- 然后建模跑最小费用最大流:
- 由S向Xi连一条容量为ri,费用为0的边,代表每天会产生ri块旧餐巾;
- 由Yi向T连一条容量为ri,费用为0的边,代表每天需要ri块新餐巾(此边一定要填满);
- 由Xi向Xi+1连一条容量为inf,费用为0的边,代表这些旧餐巾留到下一天处理;
- 由Xi到Yi+m(Xi+m<=day)连一条容量为inf,费用为f的边,代表快洗;
- 由Xi到Yi+n(Xi+n<=day)连一条容量为inf,费用为s的边,代表慢洗;
- 由S到Yi连一条容量为inf,费用为p的边,代表买新的。
- PS:更新奇的是这样跑可以保证由Yi向T的边一定会填满。
- */
- #include<cstdio>
- #include<iostream>
- #define N 410
- #define M 100010
- #define inf 1000000000
- using namespace std;
- int head[N],dis[N],r[N],q[N*],inq[N],fa[N],day,p,m,f,n,s,cnt=,S,T,ans;
- struct node{
- int u,v,pre,f,w;
- };node e[M];
- void add(int u,int v,int f,int w){
- e[++cnt].u=u;e[cnt].v=v;e[cnt].f=f;e[cnt].w=w;e[cnt].pre=head[u];head[u]=cnt;
- e[++cnt].u=v;e[cnt].v=u;e[cnt].f=;e[cnt].w=-w;e[cnt].pre=head[v];head[v]=cnt;
- }
- bool spfa(){
- for(int i=;i<=T;i++)dis[i]=inf;
- int h=,t=;dis[S]=;q[]=S;inq[S]=;
- while(h<t){
- int now=q[++h];inq[now]=;
- for(int i=head[now];i;i=e[i].pre){
- int v=e[i].v;
- if(e[i].f&&dis[v]>dis[now]+e[i].w){
- dis[v]=dis[now]+e[i].w;
- fa[v]=i;
- if(!inq[v]){
- inq[v]=;
- q[++t]=v;
- }
- }
- }
- }
- return dis[T]!=inf;
- }
- void up_data(){
- int i=fa[T],x=inf;
- while(i!=S){
- x=min(x,e[i].f);
- i=fa[e[i].u];
- }
- i=fa[T];
- while(i!=S){
- e[i].f-=x;
- e[i^].f+=x;
- ans+=x*e[i].w;
- i=fa[e[i].u];
- }
- }
- int main(){
- freopen("napkin.in","r",stdin);
- freopen("napkin.out","w",stdout);
- scanf("%d",&day);
- for(int i=;i<=day;i++)scanf("%d",&r[i]);
- scanf("%d%d%d%d%d",&p,&m,&f,&n,&s);
- S=;T=*day+;
- for(int i=;i<=day;i++){
- add(S,i,r[i],);
- add(i+day,T,r[i],);
- if(i+<=day)add(i,i+,inf,);
- if(i+m<=day)add(i,i+m+day,inf,f);
- if(i+n<=day)add(i,i+n+day,inf,s);
- add(S,i+day,inf,p);
- }
- while(spfa())up_data();
- printf("%d",ans);
- return ;
- }
[网络流24题]餐巾(cogs 461)的更多相关文章
- Cogs 461. [网络流24题] 餐巾(费用流)
[网络流24题] 餐巾 ★★★ 输入文件:napkin.in 输出文件:napkin.out 简单对比 时间限制:5 s 内存限制:128 MB [问题描述] 一个餐厅在相继的N天里,第i天需要Ri块 ...
- 【COGS 461】[网络流24题] 餐巾 最小费用最大流
既然是最小费用最大流我们就用最大流来限制其一定能把每天跑满,那么把每个表示天的点向T连流量为其所需餐巾,费用为0的边,然后又与每天的餐巾对于买是无限制的因此从S向每个表示天的点连流量为INF,费用为一 ...
- 网络流24题 餐巾计划(DCOJ8008)
题目描述 一个餐厅在相继的 n nn 天里,每天需用的餐巾数不尽相同.假设第 i ii 天需要 ri r_iri 块餐巾.餐厅可以购买新的餐巾,每块餐巾的费用为 P PP 分:或者把旧餐巾送到快 ...
- CGOS461 [网络流24题] 餐巾(最小费用最大流)
题目这么说的: 一个餐厅在相继的N天里,第i天需要Ri块餐巾(i=l,2,…,N).餐厅可以从三种途径获得餐巾. 购买新的餐巾,每块需p分: 把用过的餐巾送到快洗部,洗一块需m天,费用需f分(f< ...
- 【zkw费用流】[网络流24题]餐巾计划问题
题目描述 一个餐厅在相继的N天里,第i天需要Ri块餐巾(i=l,2,-,N).餐厅可以从三种途径获得餐巾. (1)购买新的餐巾,每块需p分: (2)把用过的餐巾送到快洗部,洗一块需m天,费用需f分(f ...
- COGS461. [网络流24题] 餐巾
[问题描述] 一个餐厅在相继的N天里,第i天需要Ri块餐巾(i=l,2,…,N).餐厅可以从三种途径获得餐巾. (1)购买新的餐巾,每块需p分: (2)把用过的餐巾送到快洗部,洗一块需m天,费用需f分 ...
- 【Codevs1237&网络流24题餐巾计划】(费用流)
题意:一个餐厅在相继的 N 天里,每天需用的餐巾数不尽相同. 假设第 i 天需要 ri块餐巾(i=1,2,…,N).餐厅可以购买新的餐巾,每块餐巾的费用为 p 分: 或者把旧餐巾送到快洗部,洗一块需 ...
- Bashu2445 -- 【网络流24题-10】餐巾问题
2445 -- [网络流24题-10]餐巾问题 Description 一个餐厅在相继的n天里,每天需要用的餐巾数不尽相同.假设第i天需要ri块餐巾(i=1,2,…,n).餐厅可以购买新的餐巾,每块餐 ...
- LibreOJ #6008. 「网络流 24 题」餐巾计划 最小费用最大流 建图
#6008. 「网络流 24 题」餐巾计划 内存限制:256 MiB时间限制:1000 ms标准输入输出 题目类型:传统评测方式:文本比较 上传者: 匿名 提交提交记录统计讨论测试数据 题目描述 ...
随机推荐
- js验证姓名和身份证号
js验证真实姓名,是用的unicode字符的来进行匹配,而中国人的姓名长度一般都是2-4,所以重复匹配{2,4}次 1.js验证真实姓名 1 var regName =/^[\u4e00-\u9fa5 ...
- XML类似的解析时,会遇到'XXX' 不是 'NCName' 的有效值的问题
主要原因是:xml中或类xml的文件中有些关键属性的值不符合NCName命名规范,例如我遇到的是流程的bpmn文件中,id的属性值命名的数字开头. NCName 不包含冒号 (:) 的 XML 名称. ...
- OpenCv高斯,中值,均值,双边滤波
#include "cv.h" #include "highgui.h" #include <iostream> using namespace s ...
- mysql 字符集设置方法
php 5.6,mysql 5.5/etc/my.cnf (1) 最简单的修改方法,就是修改mysql的my.ini文件中的字符集键值, 如 default-character-set = utf8c ...
- 2016年11月2日--Window.document对象
一.找到元素: docunment.getElementById("id"): 根据id找,最多找一个: var a =docunment ...
- BZOJ 3363: [Usaco2004 Feb]Cow Marathon 奶牛马拉松
Description 给你一个图,两个点至多有一条路径,求最长的一条路径. \(n \leqslant 4\times 10^4\) Sol DFS?DP? 这就是一棵树,方向什么的都没用... 然 ...
- COGS 2416.[HZOI 2016]公路修建 & COGS 2419.[HZOI 2016]公路修建2 题解
大意: [HZOI 2016]公路修建 给定一个有n个点和m-1组边的无向连通图,其中每组边都包含一条一级边和一条二级边(连接的顶点相同),同一组边中的一级边权值一定大于等于二级边,另外给出一个数k( ...
- tcp 三次握手
- Best Time to Buy and Sell Stock with Cooldown
Say you have an array for which the ith element is the price of a given stock on day i. Design an al ...
- C# webservice 编写、发布、调用
采用的工具VS2010生成工程 1. 生成webservice工程:建 ASP.NET 空WEB 应用程序. 2. 在建好的ASP.NET 空WEB应用程序中新建项“web 服务”. 完成上述内容工程 ...