餐巾计划问题 费用流

题目描述

一个餐厅在相继的 NNN 天里,每天需用的餐巾数不尽相同。假设第 iii 天需要 rir_iri​块餐巾( i=1,2,...,N)。餐厅可以购买新的餐巾,每块餐巾的费用为 ppp 分;或者把旧餐巾送到快洗部,洗一块需 m 天,其费用为 f 分;或者送到慢洗部,洗一块需 nnn 天(n>mn>mn>m),其费用为 sss 分(s<fs<fs<f)。

每天结束时,餐厅必须决定将多少块脏的餐巾送到快洗部,多少块餐巾送到慢洗部,以及多少块保存起来延期送洗。但是每天洗好的餐巾和购买的新餐巾数之和,要满足当天的需求量。

试设计一个算法为餐厅合理地安排好 NNN 天中餐巾使用计划,使总的花费最小。编程找出一个最佳餐巾使用计划。

输入输出格式

输入格式:

由标准输入提供输入数据。文件第 1 行有 1 个正整数 NNN,代表要安排餐巾使用计划的天数。

接下来的 NNN 行是餐厅在相继的 NNN 天里,每天需用的餐巾数。

最后一行包含5个正整数p,m,f,n,sp,m,f,n,sp,m,f,n,s。ppp 是每块新餐巾的费用; mmm 是快洗部洗一块餐巾需用天数; fff 是快洗部洗一块餐巾需要的费用; nnn 是慢洗部洗一块餐巾需用天数; sss 是慢洗部洗一块餐巾需要的费用。

输出格式:

将餐厅在相继的 N 天里使用餐巾的最小总花费输出

输入输出样例

输入样例#1: 复制

3
1 7 5
11 2 2 3 1

输出样例#1: 复制

134

说明

N<=2000

ri<=10000000

p,f,s<=10000

时限4s

重要是建图;

将每一天分为早上和晚上;

s向每一天晚上连容量为ri,费用为0的边,每一天早上向t连容量为ri,费用为0的边;

第 i 天晚上可以向第 i+1 天晚上连边,对于清洗来说,第 i 天晚上可以向 第 i+T1/T2 天早上连边;

最后每一天早上都可以花费 p 来购买毛巾;

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstdlib>
#include<cstring>
#include<string>
#include<cmath>
#include<map>
#include<set>
#include<vector>
#include<queue>
#include<bitset>
#include<ctime>
#include<deque>
#include<stack>
#include<functional>
#include<sstream>
//#include<cctype>
//#pragma GCC optimize(2)
using namespace std;
#define maxn 200005
#define inf 0x7fffffff
//#define INF 1e18
#define rdint(x) scanf("%d",&x)
#define rdllt(x) scanf("%lld",&x)
#define rdult(x) scanf("%lu",&x)
#define rdlf(x) scanf("%lf",&x)
#define rdstr(x) scanf("%s",x)
typedef long long  ll;
typedef unsigned long long ull;
typedef unsigned int U;
#define ms(x) memset((x),0,sizeof(x))
const long long int mod = 1e9;
#define Mod 1000000000
#define sq(x) (x)*(x)
#define eps 1e-5
typedef pair<int, int> pii;
#define pi acos(-1.0)
//const int N = 1005;
#define REP(i,n) for(int i=0;i<(n);i++)
typedef pair<int, int> pii;inline int rd() {int x = 0;char c = getchar();bool f = false;while (!isdigit(c)) {if (c == '-') f = true;c = getchar();}while (isdigit(c)) {x = (x << 1) + (x << 3) + (c ^ 48);c = getchar();}return f ? -x : x;
}ll gcd(ll a, ll b) {return b == 0 ? a : gcd(b, a%b);
}
int sqr(int x) { return x * x; }/*ll ans;
ll exgcd(ll a, ll b, ll &x, ll &y) {if (!b) {x = 1; y = 0; return a;}ans = exgcd(b, a%b, x, y);ll t = x; x = y; y = t - a / b * y;return ans;
}
*/bool vis[maxn];
int n, m, s, t;
int x, y, f, z;
ll dis[maxn], pre[maxn], last[maxn], flow[maxn];
ll maxflow, mincost;struct node {ll to, nxt, flow, dis;
}edge[maxn << 2];int head[maxn], cnt;
queue<int>q;void addedge(int from, int to, int flow, int dis) {edge[++cnt].to = to; edge[cnt].flow = flow; edge[cnt].dis = dis;edge[cnt].nxt = head[from]; head[from] = cnt;
}bool spfa(int s, int t) {memset(dis, 0x7f, sizeof(dis)); memset(flow, 0x7f, sizeof(flow));ms(vis);q.push(s); vis[s] = 1; dis[s] = 0; pre[t] = -1;while (!q.empty()) {int now = q.front(); q.pop(); vis[now] = 0;for (int i = head[now]; i != -1; i = edge[i].nxt) {if (edge[i].flow > 0 && dis[edge[i].to] > dis[now] + edge[i].dis) {dis[edge[i].to] = edge[i].dis + dis[now];pre[edge[i].to] = now; last[edge[i].to] = i;flow[edge[i].to] = min(flow[now], edge[i].flow);if (!vis[edge[i].to]) {vis[edge[i].to] = 1; q.push(edge[i].to);}}}}return pre[t] != -1;
}void mincost_maxflow() {while (spfa(s, t)) {int now = t;maxflow += flow[t]; mincost += flow[t] * dis[t];while (now != s) {edge[last[now]].flow -= flow[t];edge[last[now] ^ 1].flow += flow[t];now = pre[now];}}
}int main()
{//ios::sync_with_stdio(0);memset(head, -1, sizeof(head)); cnt = 1;n = rd(); s = 0; t = 2 * n + 2;for (int i = 1; i <= n; i++) {int  x; x = rd();addedge(s, i, x, 0); addedge(i, s, 0, 0);addedge(i + n, t, x, 0); addedge(t, i + n, 0, 0);}int p; int m1, t1, m2, t2;p = rd(); t1 = rd();m1 = rd(); t2 = rd(); m2 = rd(); for (int i = 1; i <= n; i++) {if (i + 1 <= n)addedge(i, i + 1, inf, 0), addedge(i + 1, i, 0, 0);if (i + t1 <= n)addedge(i, i + t1 + n, inf, m1), addedge(i + t1 + n, i, 0, -m1);if (i + t2 <= n)addedge(i, i + t2 + n, inf, m2), addedge(i + t2 + n, i, 0, -m2);addedge(s, i + n, inf, p), addedge(i + n, s, 0, -p);}mincost_maxflow();printf("%lld\n", 1ll * mincost);return 0;
}

posted @ 2019-02-03 11:42 NKDEWSM 阅读(...) 评论(...) 编辑 收藏

餐巾计划问题 费用流相关推荐

  1. P1251 餐巾计划问题 费用流

    https://www.luogu.org/problemnew/show/P1251 题意 有一家酒店,酒店每天需要ri张桌布,桌布可以现买,p元.可以通过快洗店,等m天,f元.可以通过慢洗店,等n ...

  2. jzoj4802-[GDOI2017模拟9.24]探险计划【费用流,拆点】

    正题 题目大意 一个nnn行的不完全矩阵第iii行有m+i−1m+i-1m+i−1个格子,然后每个格子有危险度. 每次可以从(i,j)(i,j)(i,j)走到(i−1,j)(i-1,j)(i−1,j) ...

  3. 【图论】【网络流】费用流模型

    费用流模型 费用流板子 费用流直接应用 运输问题 负载平衡问题 二分图最大匹配 分配问题 最大权不相交路径 数字梯形问题 费用流网格图模型 K取方格数 深海机器人问题 费用流拆点 餐巾计划问题 费用流 ...

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

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

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

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

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

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

  7. P1251-餐巾计划问题【费用流】

    正题 题目链接:https://www.luogu.com.cn/problem/P1251 题目大意 NNN天,第iii天需要aia_iai​个餐巾. 每个餐巾价格为ppp,使用完后有两种清洗方法 ...

  8. BZOJ3291Alice与能源计划——匈牙利算法+模拟费用流

    题目描述 在梦境中,Alice来到了火星.不知为何,转眼间Alice被任命为火星能源部长,并立刻面临着一个严峻的考验.为 了方便,我们可以将火星抽象成平面,并建立平面直角坐标系.火星上一共有N个居民点 ...

  9. [BZOJ 1221][HNOI2001]软件开发(费用流)

    Description 某软件公司正在规划一项n天的软件开发计划,根据开发计划第i天需要ni个软件开发人员,为了提高软件开发人员的效率,公司给软件人员提供了很多的服务,其中一项服务就是要为每个开发人员 ...

  10. Codeforces.802C.Heidi and Library (hard) (费用流zkw)

    题目链接 复习了下餐巾计划问题.全忘了=-= 首先这是一道网络流.然后本题有\(n\)种建图方法,以及\(smy\) dalao还有单纯形做法. 先假设所有物品都是买入的.那么对于每一天,拆成两个点\ ...

最新文章

  1. foolscap实现rpc(四)
  2. 亲测可用centos7安装git_centos7安装git踩坑记
  3. 学习笔记(06):Python网络编程并发编程-在简单套接字基础上加上通信循环
  4. LintCode Python 简单级题目 491.回文数
  5. 《Reids 设计与实现》第十一章 服务器
  6. python画图包哪个好_十款好用的画图软件,你都用过吗?
  7. 思科无线路由EA6500代理服务器,思科EA6500路由器怎样设置
  8. 用shell脚本在consul注册exporter服务
  9. 关于Facebook的28件小事
  10. 松翰单片机 c语言例程 宏定义出错,松翰单片机 SN8F5702程序例程
  11. Django+Vue开发生鲜电商平台之2.开发环境搭建
  12. 使用思维导图的甘特图进行项目排期
  13. 【前端部署】vue项目打包并部署到Linux服务器
  14. Ubuntu下安装deb包命令
  15. (48)STM32——图片显示实验
  16. 软工网络15团队作业2——团队计划
  17. ICAN业务流程外包是在CRMservices的专业领导机构
  18. Unity3d shader实现消融效果
  19. Eclipse工程导入,找不到工程问题
  20. 肾积水的主要表现症状都有哪些?

热门文章

  1. 揭秘北京奥运会上的中国保镖[转贴]
  2. 三层交换机的工作原理
  3. 标准盒子模型和IE盒子模型的区别
  4. MindManager2022安装使用教程
  5. 创新工场5位创业者2011创业感悟
  6. 《中国近代史纲要》思维导图复习版
  7. 跳步游戏2--返回最小跳步数
  8. u3d canvas设置
  9. 多智能体系统的分布式协同控制——采样控制、脉冲控制、弹性控制
  10. 商务网站建设与维护【16】