题目描述

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

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

输入

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

输出

输出仅有一个整数,为餐厅在相继的N 天里使用餐巾的最小总花费。

样例输入

3 10 2 3 3 2
5
6
7

样例输出

145

费用流。但是如何建图呢。把每天拆成两个点,i为每天有的干净餐巾数,i+N为每天有的脏餐巾数,建一个超级源点S,一个超级汇点T

把S向i连一条容量为INF,费用为p的边。表示每天可以买无限块餐巾,一条餐巾p分
把i向T连一条容量为ri,费用为0的边。表示每天需要ri块餐巾
把S向i+N连一条容量为ri,费用为0的边。表示每天会用脏ri块餐巾
把i+N向i+m连一条容量为INF,费用为f的边。表示每天可以去快洗部清洗无限块餐巾,耗时m天,一条餐巾需f分
把i+N向i+n连一条容量为INF,费用为s的边。表示每天可以去慢洗部清洗无限块餐巾,耗时n天,一条餐巾需s分
把i+N向i+N+1连一条容量为INF,费用为0的边。表示每天可以把未清洗的餐巾留到下一天
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int inq[],d[],h[],q[],from[],head,tail,k=,INF=,ans=,r[];
struct data{
int to,cap,cost,next;
}g[];
void add(int from,int to,int cap,int cost)
{
g[++k].next=h[from];h[from]=k;g[k].to=to;g[k].cap=cap;g[k].cost=cost;
g[++k].next=h[to];h[to]=k;g[k].to=from;g[k].cap=;g[k].cost=-cost;
}
bool spfa(int s,int t)
{
memset(inq,,sizeof(inq));
memset(d,/,sizeof(d));INF=d[];
d[s]=;inq[s]=;head=tail=;q[tail++]=s;
while(head<=tail)
{
int u=q[head++];inq[u]=;
for(int i=h[u];i;i=g[i].next)
{
if(g[i].cap&&d[u]+g[i].cost<d[g[i].to])
{
d[g[i].to]=d[u]+g[i].cost;from[g[i].to]=i;
if(!inq[g[i].to])
{
if(d[g[i].to]<d[q[head]])q[--head]=g[i].to;
else q[tail++]=g[i].to;inq[g[i].to]=;
}
}
}
}
if(d[t]==INF)return false;
return true;
}
void mcf(int t)
{
int minn=INF;
for(int i=from[t];i;i=from[g[i^].to])minn=min(minn,g[i].cap);
for(int i=from[t];i;i=from[g[i^].to])g[i].cap-=minn,g[i^].cap+=minn,ans+=minn*g[i].cost;
}
int main()
{
int N,p,m,f,n,s;scanf("%d%d%d%d%d%d",&N,&p,&m,&f,&n,&s);
for(int i=;i<=N;i++)
{
scanf("%d",&r[i]);
add(*N+,i,INF,p);add(i,*N+,r[i],);add(*N+,i+N,r[i],);
if(i+m<=N)add(i+N,i+m,INF,f);
if(i+n<=N)add(i+N,i+n,INF,s);
if(i+<=N)add(i+N,i+N+,INF,);
}
while(spfa(*N+,*N+))mcf(*N+);
printf("%d",ans);return ;
}

[codevs_1237]餐巾计划问题的更多相关文章

  1. P1251 餐巾计划问题

    P1251 餐巾计划问题 题目描述 一个餐厅在相继的 N 天里,每天需用的餐巾数不尽相同.假设第 iii 天需要 rir_iri​块餐巾( i=1,2,...,N).餐厅可以购买新的餐巾,每块餐巾的费 ...

  2. LibreOJ #6008. 「网络流 24 题」餐巾计划 最小费用最大流 建图

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

  3. Libre 6008 「网络流 24 题」餐巾计划 (网络流,最小费用最大流)

    Libre 6008 「网络流 24 题」餐巾计划 (网络流,最小费用最大流) Description 一个餐厅在相继的N天里,第i天需要Ri块餐巾(i=l,2,-,N).餐厅可以从三种途径获得餐巾. ...

  4. 洛谷 P1251 餐巾计划问题(线性规划网络优化)【费用流】

    (题外话:心塞...大部分时间都在debug,拆点忘记加N,总边数算错,数据类型标错,字母写错......) 题目链接:https://www.luogu.org/problemnew/show/P1 ...

  5. BZOJ1229 & 洛谷2917:[USACO2008 NOV]toy 玩具 & 洛谷4480:[BJWC2018]餐巾计划问题——题解

    标题很长emmm…… [USACO2008 NOV]toy 玩具 https://www.luogu.org/problemnew/show/P2917 https://www.lydsy.com/J ...

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

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

  7. AC日记——餐巾计划问题 洛谷 P1084

    餐巾计划问题 思路: 氧气优化水过: 代码: #include <bits/stdc++.h> using namespace std; #define maxn 4005 #define ...

  8. LOJ #6008. 「网络流 24 题」餐巾计划

    #6008. 「网络流 24 题」餐巾计划 题目描述 一个餐厅在相继的 n nn 天里,每天需用的餐巾数不尽相同.假设第 i ii 天需要 ri r_ir​i​​ 块餐巾.餐厅可以购买新的餐巾,每块餐 ...

  9. [luogu_P1251][LOJ#6008]「网络流 24 题」餐巾计划

    [luogu_P1251][LOJ#6008]「网络流 24 题」餐巾计划 试题描述 一个餐厅在相继的 \(N\) 天里,第 \(i\) 天需要 \(R_i\) 块餐巾 \((i=l,2,-,N)\) ...

随机推荐

  1. C# 输出结果有System.Byte[]

    byte[]类型直接输出或者调用ToString函数都会出现这个结果. 需要执行: byte[] a=new byte[10]; string text = "";for (int ...

  2. 每天一个Linux命令(3):ls命令

    ls命令用来显示目标列表,在Linux中是使用率较高的命令.ls命令的输出信息可以进行彩色加亮显示,以分区不同类型的文件. 语法 ls(选项)(参数) 选项 -a:显示所有档案及目录(ls内定将档案名 ...

  3. mysql:用户管理、索引、视图、函数、存储过程

    #创建一个用户并设置密码,注意IP地址要是登录mysql电脑的IP地址 USE mysql CREATE USER lisi@'192.168.149.1' IDENTIFIED BY "1 ...

  4. python3知识点之---------字符串的介绍

    1. 定义 其实字符串就是一系列字符,用引号括起来的就是字符串,其中的引号可以是单引号或者双引号. 比如 "This is a string"   'This is a strin ...

  5. day04_08-while查询所有行

    <?php $link = @mysql_connect('localhost','root',''); mysql_query('use test',$link); mysql_query(' ...

  6. (转\整)UE4游戏优化 多人大地型游戏的优化(一)游戏线程的优化

    施主分享随缘,评论随心,@author:白袍小道 小道暗语: 1.因为小道这里博客目录没自己整,暂时就用随笔目录结构,所以二级目录那啥就忽略了.标题格式大致都是(原or转) 二级目录 (标题) 2.因 ...

  7. 【多线程学习(1)】创建java多线程

    1)java多线程的创建方式有三种: 1.继承Thread类 2.实现Runnable接口 3.实现Callable接口 第一种: //继承Thread类 class ExtendsThread ex ...

  8. rtmp jwplayer简单应用

    在nginx下使用,放到nginx/html文件夹内,之后访问 首先是播放vod视频 <!DOCTYPE html> <html xmlns="http://www.w3. ...

  9. htmlagilitypack解析html

    这是个很好的的东西,以前做Html解析都是在用htmlparser,用的虽然顺手,但解析速度较慢,碰巧今天找到了这个,就拿过来试,一切出乎意料,非常爽,推荐给各位使用. 下面是一些简单的使用技巧,希望 ...

  10. Java性能监控之Java程序执行解析

    大家好,最近接触javassist技术,研究过程中对Java程序执行过程进行了一系列探索,弄清楚了几个盲区(仅针对个人而言),现将经验与大家分享. 1.编码->.java 通常指写代码的过程,最 ...