传送门

最小费用最大流。

每天拆成两个点,i表示用完的餐巾,i+n表示干净的餐巾。

s向i连容量为ri费用为0的边,表示每天用脏的ri条餐巾。

i+n向t连容量为ri费用为0的边,表示每天需要用ri条餐巾。

s向1+n连容量为inf费用为p的边,表示新买进的干净餐巾,需要新买的在第一天全买了。

两种洗法都是,i 向 i+time+n 连容量为xx,费用为cost的边,表示第i天用完就洗干净放在洗完的第一天看哪天要用。

i+n向i+1+n连容量为Inf,费用为0的边,表示前一天没用的(新买的/洗干净的)干净餐巾,免费留到下一天用。

不明白为什么其他人都要把脏的留到什么时候需要再洗,不应该立刻洗了屯着么。。

//Achen
#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdlib>
#include<cstdio>
#include<vector>
#include<queue>
#include<cmath>
#include<ctime>
const int N=1e6+,inf=0x7fffffff;
typedef long long LL;
using namespace std;
int n,pp,kt,kv,mt,mv; template<typename T> void read(T &x) {
T f=; x=; char ch=getchar();
while(ch!='-'&&(ch<''||ch>'')) ch=getchar();
if(ch=='-') f=-,ch=getchar();
for(;ch>=''&&ch<='';ch=getchar()) x=x*+ch-''; x*=f;
} struct edge {
int u,v,fl,cap,cost,nx;
edge(){}
edge(int u,int v,int fl,int cap,int cost,int nx):u(u),v(v),fl(fl),cap(cap),cost(cost),nx(nx){}
}e[N]; int fir[N],ecnt=;
void add(int u,int v,int cap,int cost) {
e[++ecnt]=edge(u,v,,cap,cost,fir[u]); fir[u]=ecnt;
e[++ecnt]=edge(v,u,,,-cost,fir[v]); fir[v]=ecnt;
} int vis[N],dis[N],p[N],tot;
queue<int>que;
int spfa(int s,int t) {
for(int i=;i<=tot;i++) vis[i]=,dis[i]=inf;
que.push(s); dis[s]=;
while(!que.empty()) {
int x=que.front();
que.pop(); vis[x]=;
for(int i=fir[x];i;i=e[i].nx)
if(e[i].cap>e[i].fl) {
int y=e[i].v;
if(dis[y]>dis[x]+e[i].cost) {
dis[y]=dis[x]+e[i].cost;
p[y]=i;
if(!vis[y]) {
vis[y]=;
que.push(y);
}
}
}
}
return dis[t]!=inf;
} int calc(int s,int t) {
int fl=inf,res=;
for(int i=t;i!=s;i=e[p[i]].u)
fl=min(fl,e[p[i]].cap-e[p[i]].fl),
res+=e[p[i]].cost;
for(int i=t;i!=s;i=e[p[i]].u)
e[p[i]].fl+=fl,e[p[i]^].fl-=fl;
return fl*res;
} int max_flow(int s,int t) {
int res=;
while(spfa(s,t))
res+=calc(s,t);
return res;
} int main() {
read(n); read(pp); read(kt);
read(kv); read(mt); read(mv);
int s=n*+,t=s+; tot=t;
add(s,+n,inf,pp);
for(int i=;i<=n;i++) {
int xx; read(xx);
add(s,i,xx,);
add(i+n,t,xx,);
if(i+<=n) add(i+n,i+n+,inf,);
if(i+kt<=n) add(i,i+n+kt,xx,kv);
if(i+mt<=n) add(i,i+n+mt,xx,mv);
}
int ans=max_flow(s,t);
printf("%d\n",ans);
return ;
}

poweroj1745: 餐巾计划问题的更多相关文章

  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. thinkone无法重新创建数据库的问题 newsy

    错误描述: 无法加载数据库驱动: Think\Db\Driver\    前后装了OneThink1.0和OneThink1.1都没成功,都是卡在了安装页面的三个step,读者们你们也遇到一样的情况吗 ...

  2. Extjs & Ext.net中的一些属性

    Extjs & Ext.Net 弹出整个浏览器对话框的方法 top.Ext.Msg.alert("值"); top.Ext.Msg.confirm("值" ...

  3. 洛谷P1640 【SCOI2010】连续攻击游戏

    原题传送门 题目描述 lxhgww最近迷上了一款游戏,在游戏里,他拥有很多的装备,每种装备都有2个属性,这些属性的值用[1,10000]之间的数表示.当他使用某种装备时,他只能使用该装备的某一个属性. ...

  4. input 的 placeholder 样式修改

    input::-webkit-input-placeholder{ color:#999999; } input::-moz-placeholder{ /* Mozilla Firefox 19+ * ...

  5. laravel中如何使用Redis(Redis是什么)

    laravel中如何使用Redis(Redis是什么) 一.总结 一句话总结: 基于内存亦可持久化键值数据库 Redis是完全开源免费的,遵守BSD协议,是一个高性能的键值数据库.是当前最热门的的的N ...

  6. 信息安全-浏览器-CORS:CORS(跨域资源共享)

    ylbtech-信息安全-浏览器-CORS:CORS(跨域资源共享) 1.返回顶部 1. CORS,全称Cross-Origin Resource Sharing,是一种允许当前域(domain)的资 ...

  7. socket工作原理深入分析

    socket原理分析 本篇文章摘自https://www.cnblogs.com/zengzy/p/5107516.html,总结的很好,所以摘过来总结整理一下,如果朋友们还想更加深入的研究网络,推荐 ...

  8. Pyhon基本数据类型

    1.数字 1.布尔型(bool) bool型只有两个值:True和False a = False b = True 2.整形 int型 n = 12 a = "12" 将字符串类型 ...

  9. Neo4j 第四篇:使用.NET驱动访问Neo4j

    本文使用的IDE是Visual Studio 2015 ,驱动程序是Neo4j官方的最新版本:Neo4j.Driver,创建的类库工程(Project)要求安装 .NET Framework 4.5. ...

  10. hiveUDF的使用

    在此自己总结下UDF的用法 1.首先最简单的UDF(普通用java扩充函数的方式,大多数简便函数可以用这个函数来实现,返回单个字段),其加强版UDGF据说对map一类数据类型有更好兼容,实现上略复杂 ...