【中学高级本-网络流24题】餐巾计划

Description

一个餐厅在相继的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天总的费用最小。

Input

共 3 行:
第 1 行为总天教;
第 2 行为每天所需的餐巾块数;
第 3 行为每块餐巾的新购费用 p ,快洗所需天数 m ,快洗所需费用 f ,慢洗所需天数 n ,慢洗所需费用 s 。

Output

一行,最小的费用

Sample Input

3
3 2 4
10 1 6 2 3

Sample Output

64

Hint

数据规模:
n<=200,Ri<=50

Source

网络流
线性规划网络优化,最小费用最大流

解析

这题也就是建图。。。

首先,我们要考虑拆点,

将一天拆成早上和晚上,

那么,每天早上,餐厅都会得到到干净的餐巾,

而餐巾则来自于购买,或是kt,mt天前的晚上(因为洗完了)(本题解中,kt为快洗天数,mt为慢洗天数,kp为快洗价格,mp为慢洗价格)。

而每天晚上,餐厅都将有X张旧餐巾产生,

而这些餐巾将会被快洗,慢洗,扔掉或是留到后一天晚上(第一次交的时候没考虑这种情况然后WA了)。

那么,我们就可以开始建图了!

首先,将源点与每天晚上连起来,流量为当天需要的餐巾数,费用为零,表示当天晚上收到的旧餐巾。

接下来,将每天晚上与kt,mt天后的早上连起来(大于n要特判),

流量为INF,费用为kp,mp,

表示洗完后的早上能得到洗的餐巾。

再将每天晚上与后一天晚上连起来,流量为INF,费用为零,表示将当天的旧餐巾放到第二天晚上再处理。

最后,将每天早上与汇点连起来,流量为当天的餐巾数,费用为零,表示当天早上收到的餐巾。

再跑最小费用最大流就行了!

上AC代码:

#include<bits/stdc++.h>
#define ll long long
using namespace std;inline ll read(){ll sum=0,f=1;char ch=getchar();while(ch>'9' || ch<'0'){if(ch=='-')f=-1;ch=getchar();}while(ch>='0' && ch<='9'){sum=sum*10+ch-'0';ch=getchar();}return f*sum;
}const int INF=10000000000000;
struct node{int next,to;ll v,w;
}e[1000001];
struct hh{int fa,edge;
}pre[100001];
int n,m,s,t,a[100001];
int p,kp,kt,mp,mt;
int head[100001],cnt=1;
int inq[100001];
ll d[100001],mi[100001];void add(int x,int y,int v,int w){e[++cnt].to=head[x];e[cnt].next=y;e[cnt].w=w;e[cnt].v=v;head[x]=cnt;
}bool spfa(){memset(pre,0,sizeof(pre));for(int i=1;i<=n*2+3;i++) d[i]=INF;for(int i=1;i<=n*2+3;i++) mi[i]=INF;memset(inq,0,sizeof(inq));queue <int> que;que.push(s);d[s]=0;while(!que.empty()){int x=que.front();inq[x]=0;que.pop();for(int i=head[x];i;i=e[i].to){int k=e[i].next;if(d[k]>d[x]+e[i].w&&e[i].v){d[k]=d[x]+e[i].w;pre[k].fa=x;pre[k].edge=i;mi[k]=min(mi[x],e[i].v);if(!inq[k]) que.push(k);inq[k]=1;}}}return d[t]!=INF;
}void EK(){ll cost=0,ret;   while(spfa()){ret=mi[t];for(int i=t;i!=s;i=pre[i].fa){e[pre[i].edge].v-=ret;e[pre[i].edge^1].v+=ret;}    cost+=ret*d[t];}printf("%lld\n",cost);return ;
}int main(){n=read();s=n*2+1;t=n*2+2;for(int i=1;i<=n;i++){a[i]=read();}p=read();kt=read();kp=read();mt=read();mp=read();for(int i=1;i<=n;i++){add(s,i,INF,p);add(i,s,0,-p);add(s,i+n,a[i],0);add(i+n,s,0,0);if(i+kt<=n){add(i+n,i+kt,INF,kp);add(i+kt,i+n,0,-kp);}if(i+mt<=n){add(i+n,i+mt,INF,mp);add(i+mt,i+n,0,-mp);}add(i,t,a[i],0);add(t,i,0,0);if(i<n){add(i+n,i+1+n,INF,0);add(i+1+n,i+n,0,0);}}EK();return 0;
}

转载于:https://www.cnblogs.com/zsq259/p/10516368.html

题解 【中学高级本-网络流24题】餐巾计划相关推荐

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

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

  2. [网络流24题] 餐巾计划问题

    题目链接:戳我 建图方式比较巧妙的一个题. 首先还是拆点思想,就是对于一个点,我们拆成早上和晚上两种状态. 之后我们考虑怎么建图. 首先我们定义早上状态接收干净餐巾,传出脏餐巾.晚上接收脏餐巾,传出干 ...

  3. COGS461. [网络流24题] 餐巾

    [问题描述] 一个餐厅在相继的N天里,第i天需要Ri块餐巾(i=l,2,-,N).餐厅可以从三种途径获得餐巾. (1)购买新的餐巾,每块需p分: (2)把用过的餐巾送到快洗部,洗一块需m天,费用需f分 ...

  4. 题解:线性规划与网络流24题 T2 太空飞行计划问题

    太空飞行计划问题 问题描述 W教授正在为国家航天中心计划一系列的太空飞行.每次太空飞行可进行一系列商业性实验而获取利润.现已确定了一个可供选择的实验集合E={E1,E2,-,Em},和进行这些实验需要 ...

  5. 解题报告:线性规划与网络流24题

    目录 A.飞行员配对方案问题 (二分图最大匹配)(最大流)[提高+/省选- ] B.太空飞行计划问题(最大权闭合图转最小割.最小割方案输出)[省选/NOI- ] C.最小路径覆盖问题(有向无环图最小路 ...

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

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

  7. 【题解】网络流24题一句话题解集合

    最近写了下<线性规划与网络流24题>,发下代码和题解,事实上就是将交给cycycy的题解复制一下 T1 飞行员配对方案问题 solution 裸的匈牙利 code #include< ...

  8. 题解 【网络流24题】太空飞行计划

    [网络流24题]太空飞行计划 Description W 教授正在为国家航天中心计划一系列的太空飞行.每次太空飞行可进行一系列商业性实验而获取利润.现已确定了一个可供选择的实验集合E={E1,E2,- ...

  9. 「网络流24题」 题目列表

    「网络流24题」 题目列表 序号 题目标题 模型 题解 1 飞行员配对方案问题 二分图最大匹配 <1> 2 太空飞行计划问题 最大权闭合子图 <2> 3 最小路径覆盖问题 二分 ...

  10. 【算法】【网络流24题】巨坑待填(成功TJ,有时间再填)

    ------------------------------------------------------------------------------------ 17/24 --------- ...

最新文章

  1. 石英晶体振荡器的结构
  2. python内置函数:iter、enumerate和next
  3. cisco 核心交换机连接两个路由器_CISCO、H3C、华为三层交换机端口二三层切换命令对比...
  4. NeHe教程Qt实现——lesson07
  5. JavaWeb黑马旅游网-学习笔记05【分类数据展示功能】
  6. Row_number () over (partition by col1 order by col2)的用法
  7. HTML与CSS基础之常用选择器(一)
  8. php去除所有标点符号的方法,php如何去除标点符号
  9. api 另一窗体 之上_12 个设计 API 的安全建议,不要等出事儿了“捶胸顿足”
  10. 基本STRUTS标签-学习笔记-Bean标签
  11. python plot画图_Python进阶之Matplotlib入门(四)
  12. 野火RT1052关于 W25Q256JV NORFLASH异常锁死的解锁处理
  13. 世界很大,一定要出去看看
  14. 通达信标记符号_通达信各种符号
  15. DOTween的使用(一) DOTween实现代码延时执行 + DOTween.Sequence的(队列)的简单介绍
  16. 基于elementUI封装了基础表单组件
  17. SEO基础:Meta标签之Keywords、Description
  18. Flash大文件断点续传解决方案
  19. Information:java: 系统资源不足。
  20. 计算机组成原理——篇三

热门文章

  1. KchmViewer linux kde下出色一个chm阅读器
  2. UI设计师常用工具软件都有哪些,UI设计工具盘点
  3. android dm 分区异常,硬盘分区时损坏,无法使用PQ和DM,如何修复
  4. 网站出现502 BAD GATEWAY的解决办法
  5. delphi mysql.pas_Delphi 一些pas
  6. 计算机之父的童年故事教案,《计算机之父的童年故事》教学设计
  7. mp3lame linux 编译,linux下lame编程:wav转MP3示例代码
  8. 数据大屏适配解决方案
  9. Google Cloud + Firebase 讲解
  10. 英特尔携手生态伙伴亮相InfoComm,赋能协作办公迈向智能时代