1237 餐巾计划问题

时间限制: 1 s
空间限制: 128000 KB
题目等级 : 钻石 Diamond
 
题目描述 Description

一个餐厅在相继的 N 天里,每天需用的餐巾数不尽相同。假设第 i 天需要 ri块餐巾(i=1,2,…,N)。餐厅可以购买新的餐巾,每块餐巾的费用为 p 分;或者把旧餐巾送到快洗部,洗一块需 m 天,其费用为 f 分;或者送到慢洗部,洗一块需 n 天(n>m),其费用为 s<f 分。
每天结束时,餐厅必须决定将多少块脏的餐巾送到快洗部,多少块餐巾送到慢洗部,以及多少块保存起来延期送洗。但是每天洗好的餐巾和购买的新餐巾数之和,要满足当天的需求量。
试设计一个算法为餐厅合理地安排好 N 天中餐巾使用计划,使总的花费最小。
编程找出一个最佳餐巾使用计划.

输入描述
Input Description

第 1 行有 6 个正整数 N,p,m,f,n,s。N 是要安排餐巾使用计划的天数;p 是每块新餐巾的费用;m 是快洗部洗一块餐巾需用天数;f 是快洗部洗一块餐巾需要的费用;n 是慢洗部洗一块餐巾需用天数;s 是慢洗部洗一块餐巾需要的费用。接下来的 N 行是餐厅在相继的 N 天里,每天需用的餐巾数。

输出描述
Output Description

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

样例输入
Sample Input

3 10 2 3 3 2

5

6

7

样例输出
Sample Output

145

数据范围及提示
Data Size & Hint

N<=2000

ri<=10000000

p,f,s<=10000

时限4s

题解

最小费用最大流。

把每天拆成两个点,脏毛巾(1~N)和干净毛巾(N+1~2N),

从源点往每个干净毛巾的点连一条费用为p,流量INF的边;(买新毛巾

每个干净点往汇点连费用为0,流量ri的边(提供干净毛巾

从源点往每个脏毛巾点连费用为0,流量ri的边(给处理的人脏毛巾

每个脏点往m天后的干净点连费用为f,流量INF的边(让快洗部洗

同理往n天后的干净点连费用为s,流量INF的边(让慢洗部洗

以及,每个脏点往下一个脏点连费用为0,流量INF(留着不洗

最后跑一遍从S到T的费用流,输出最小费用。

 #include<queue>
#include<cmath>
#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std;
const int INF=;
int n,fx,tk,fk,tm,fm;
int s,t;
struct emm{
int e,f,v,c;
}a[];
int h[];
int tot=;
void con(int l,int r,int vv,int cc)
{
a[++tot].f=h[l];
h[l]=tot;
a[tot].e=r;
a[tot].v=vv;
a[tot].c=cc;
a[++tot].f=h[r];
h[r]=tot;
a[tot].e=l;
a[tot].c=-cc;
return;
}
int d[];
bool sf[];
queue<int>q;
inline bool spfa()
{
memset(sf,,sizeof(sf));
memset(d,,sizeof(d));
d[s]=;sf[s]=;q.push(s);
while(!q.empty())
{
int x=q.front();q.pop();
for(int i=h[x];i;i=a[i].f)
if(d[x]+a[i].c<d[a[i].e]&&a[i].v)
{
d[a[i].e]=d[x]+a[i].c;
if(!sf[a[i].e])
{
sf[a[i].e]=;
q.push(a[i].e);
}
}
sf[x]=;
}
return d[t]<INF;
}
unsigned long long ans=;
int dfs(int x,int al)
{
sf[x]=;
if(x==t||!al)return al;
int fl=;
for(int i=h[x];i;i=a[i].f)
if(d[a[i].e]==d[x]+a[i].c&&a[i].v&&!sf[a[i].e])
{
int f=dfs(a[i].e,min(al,a[i].v));
if(f)
{
fl+=f;
al-=f;
ans+=f*a[i].c;
a[i].v-=f;
a[i^].v+=f;
if(!al)break;
}
}
if(!fl)d[x]=-INF;
return fl;
}
void scan()
{
scanf("%d%d%d%d%d%d",&n,&fx,&tk,&fk,&tm,&fm);
s=,t=*n+;
for(int i=;i<=n;++i)
{
int ri;
scanf("%d",&ri);
con(s,i,ri,);
con(s,i+n,INF,fx);
con(i+n,t,ri,);
if(i<n)con(i,i+,INF,);
if(i+tm<=n)con(i,i+tm+n,INF,fm);
if(i+tk<=n)con(i,i+tk+n,INF,fk);
}
return;
}
void zkw()
{
while(spfa())
{
sf[t]=;
while(sf[t])
{
memset(sf,,sizeof(sf));
dfs(s,INF);
}
}
return;
}
int main()
{
scan();
zkw();
cout<<ans;
return ;
}

「网络流24题」「Codevs1237」 餐巾计划问题的更多相关文章

  1. 【费用流】【网络流24题】【P1251】 餐巾计划问题

    Description 一个餐厅在相继的 \(N\) 天里,每天需用的餐巾数不尽相同.假设第 \(i\) 天需要 \(r_i\)块餐巾.餐厅可以购买新的餐巾,每块餐巾的费用为 \(p\) 分;或者把旧 ...

  2. LOJ6003 - 「网络流 24 题」魔术球

    原题链接 Description 假设有根柱子,现要按下述规则在这根柱子中依次放入编号为的球. 每次只能在某根柱子的最上面放球. 在同一根柱子中,任何2个相邻球的编号之和为完全平方数. 试设计一个算法 ...

  3. LOJ6002 - 「网络流 24 题」最小路径覆盖

    原题链接 Description 求一个DAG的最小路径覆盖,并输出一种方案. Solution 模板题啦~ Code //「网络流 24 题」最小路径覆盖 #include <cstdio&g ...

  4. LOJ6001 - 「网络流 24 题」太空飞行计划

    原题链接 Description 有个实验和个仪器,做实验有报酬买仪器有花费.每个实验都需要一些仪器,求最大净收益(实验报酬仪器花费),并输出一组方案. Solution 实验向所需仪器连边,实验的点 ...

  5. LOJ6000 - 「网络流 24 题」搭配飞行员

    原题链接 题意简述 求二分图的最大匹配. 题解 这里写的是匈牙利算法. 表示节点的当前匹配. 为真表示在这一轮匹配中,无法给节点一个新的匹配.所以如果为真就不用再dfs它了,直接continue就好. ...

  6. LibreOJ #6014. 「网络流 24 题」最长 k 可重区间集

    #6014. 「网络流 24 题」最长 k 可重区间集 内存限制:256 MiB时间限制:1000 ms标准输入输出 题目类型:传统评测方式:文本比较 上传者: 匿名 提交提交记录统计讨论测试数据   ...

  7. Libre 6013 「网络流 24 题」负载平衡 (网络流,最小费用最大流)

    Libre 6013 「网络流 24 题」负载平衡 (网络流,最小费用最大流) Description G 公司有n 个沿铁路运输线环形排列的仓库,每个仓库存储的货物数量不等.如何用最少搬运量可以使n ...

  8. Libre 6012 「网络流 24 题」分配问题 (网络流,费用流)

    Libre 6012 「网络流 24 题」分配问题 (网络流,费用流) Description 有n件工作要分配给n个人做.第i个人做第j件工作产生的效益为\(c_{ij}\).试设计一个将n件工作分 ...

  9. Libre 6011 「网络流 24 题」运输问题 (网络流,最小费用最大流)

    Libre 6011 「网络流 24 题」运输问题 (网络流,最小费用最大流) Description W 公司有m个仓库和n个零售商店.第i个仓库有\(a_i\)个单位的货物:第j个零售商店需要\( ...

  10. LibreOJ #6013. 「网络流 24 题」负载平衡 最小费用最大流 供应平衡问题

    #6013. 「网络流 24 题」负载平衡 内存限制:256 MiB时间限制:1000 ms标准输入输出 题目类型:传统评测方式:文本比较 上传者: 匿名 提交提交记录统计讨论测试数据   题目描述 ...

随机推荐

  1. css3 nth-child 与 nth-of-type 的区别

    by zhangxinxu from http://www.zhangxinxu.com本文地址:http://www.zhangxinxu.com/wordpress/?p=1709 一.深呼吸,直 ...

  2. npm 安装vue-cli

    TIP:win10下安装,使用管理员身份进行,否则会有权限限制. 1,安装完成node,node有自带的npm,可以直接在cmd中,找到nodeJs安装的路径下,进行命令行全局安装vue-cli.(n ...

  3. Fast I/O 模板

    [来源:2017 Multi-University Training Contest - Team 1] //面包有毒:P #define BUF_SIZE 100000 //fread -> ...

  4. mysql中进行删除操作时用到not in 导致删除不成功

    delete from tb_news where id not in ( select max(id) From tb_news Group By title ) 刚开始用这条语句删除一直不成功 然 ...

  5. Object源码

    1.Object是所有类的父类,默认会继承Object. 2.Object类中常用的方法有:getClass().hashCode().equals().clone().toString().fina ...

  6. ubuntu16.04安装mysql5.7.15

    1.在官网下载mysql安装包 直接选择第一个下载好了就行 2.进入你的下载文件夹下面 键入命令: tar -xvf mysql-server_5.7.13-1ubuntu16.04_i386.deb ...

  7. Spring Boot集成Spring Data Reids和Spring Session实现Session共享

    首先,需要先集成Redis的支持,参考:http://www.cnblogs.com/EasonJim/p/7805665.html Spring Boot集成Spring Data Redis+Sp ...

  8. 聊聊Code Review

    转载:https://richardcao.me/2016/09/30/Talk-About-Codereview/ 最近思考一个问题,如何进行高效的codereview,有没有好的工具可以使用,于是 ...

  9. android项目大全,总有你所需的

    注:打开请贴网址.有些直接通过链接打开的不对.  1.相对布局实例 http://kukuqiu.iteye.com/blog/1018396 2.Log图文具体解释(Log.v,Log.d,Log. ...

  10. vmware下安装mac os虚拟机问题,最后还是最终攻克了被一个小失误给陷害了

    今天决定来体验一下苹果系统.虚拟机文件大概用了一天半时间才下载完毕,解压后是39G大小,赶紧安装VMWARE.然后载入虚拟机文件体验.開始当我苹果标志出来的时候,我以为成功了.但是那个小齿轮一直在转, ...