题目链接

/*
每一天的餐巾需求相当于必须遍历某些点若干次
设q[i]为Dayi需求量 (x,y)表示边x容y费
将每个点i拆成i,i',由i'->T连(q[i],0)的边,表示求最大流的话一定要流满q[i]
对于i,由S->i连(q[i],0)的边,表示满足Dayi需求后最多还能给出q[i]块餐巾(感觉INF好像also ok?)
对于三种方式:
购买(花p买一块餐巾): 由S->i'连(INF,p),表示可以直接花p供给Dayi的需求
送到快洗部(a天洗完 每块花b): 由i->(i'+a)连(INF,b),表示给以一块花b供给Day(i+a)
送到慢洗部(c天洗完 每块花d): 由i->(i'+c)连(INF,d),表示给以一块花d供给Day(i+c)
注意某天的餐巾可以留到下一天,所以i->i+1连(INF,0)(也可以i'->(i+1)')
也可以贪心+三分...
注意数据(流量)比较大要longlong
*/
#include<queue>
#include<cstdio>
#include<cctype>
#include<cstring>
#include<algorithm>
#define gc() getchar()
typedef long long LL;
const int N=5000,M=6*N,INF=0x3f3f3f3f; int n,m,src,des,dis[N],pre[N];
int Enum,H[N],nxt[M<<1],fr[M<<1],to[M<<1],cap[M<<1],cost[M<<1];
bool inq[N];
std::queue<int> q; inline int read()
{
int now=0,f=1;register char c=gc();
for(;!isdigit(c);c=gc()) if(c=='-') f=-1;
for(;isdigit(c);now=now*10+c-'0',c=gc());
return now*f;
}
inline void AddEdge(int u,int v,int w,int c)
{
to[++Enum]=v, fr[Enum]=u, cap[Enum]=w, cost[Enum]=c, nxt[Enum]=H[u], H[u]=Enum;
to[++Enum]=u, fr[Enum]=v, cap[Enum]=0, cost[Enum]=-c, nxt[Enum]=H[v], H[v]=Enum;
}
bool SPFA()
{
memset(dis,0x3f,sizeof dis);
dis[src]=0, q.push(src);
while(!q.empty())
{
int x=q.front();q.pop();
inq[x]=0;
for(int i=H[x];i;i=nxt[i])
if(cap[i] && dis[to[i]]>dis[x]+cost[i])
{
dis[to[i]]=dis[x]+cost[i], pre[to[i]]=i;
if(!inq[to[i]]) inq[to[i]]=1,q.push(to[i]);
}
}
return dis[des]<INF;
}
LL MCMF()
{
int mn=INF; LL c=0;
for(int i=des;i!=src;i=fr[pre[i]])
mn=std::min(mn,cap[pre[i]]);
for(int i=des;i!=src;i=fr[pre[i]])
cap[pre[i]]-=mn,cap[pre[i]^1]+=mn,c+=1LL*mn*cost[pre[i]];
return c;
} int main()
{
Enum=1;
n=read();
src=0, des=n<<1|1;
for(int a,i=1;i<=n;++i)
a=read(),AddEdge(src,i,a,0),AddEdge(i+n,des,a,0);
int p=read(),a=read(),b=read(),c=read(),d=read();
for(int i=1;i<=n;++i) AddEdge(src,i+n,INF,p);
for(int i=1;i<n;++i) AddEdge(i,i+1,INF,0);
for(int i=1;i<=n-a;++i) AddEdge(i,i+n+a,INF,b);
for(int i=1;i<=n-c;++i) AddEdge(i,i+n+c,INF,d);
LL res=0;
while(SPFA()) res+=MCMF();
printf("%lld",res); return 0;
}

洛谷.1251.餐巾计划问题(费用流SPFA)的更多相关文章

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

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

  2. 洛谷P1251 餐巾计划问题(最小费用最大流)

    题意 一家餐厅,第$i$天需要$r_i$块餐巾,每天获取餐巾有三种途径 1.以$p$的费用买 2.以$f$的费用送到快洗部,并在$m$天后取出 3.以$s$的费用送到慢洗部,并在$n$天后取出 问满足 ...

  3. LuoguP1251 餐巾计划问题(费用流)

    题目描述 一个餐厅在相继的 NN 天里,每天需用的餐巾数不尽相同.假设第 ii 天需要 r_iri​块餐巾( i=1,2,...,N).餐厅可以购买新的餐巾,每块餐巾的费用为 pp 分;或者把旧餐巾送 ...

  4. 洛谷 [P251] 餐巾计划问题

    有上下界的最小费用最大流 可以联想到供求平衡问题,所以我们要拆点做这道题 把每天分为二分图两个集合中的顶点Xi,Yi,建立附加源S汇T. 1.从S向每个Xi连一条容量为ri,费用为0的有向边. 2.从 ...

  5. [洛谷P1251]餐巾计划问题

    题目大意:一个餐厅N天,每天需要$r_i$块餐巾.每块餐巾需要p元,每天用过的餐巾变脏,不能直接用.现在有快洗店和慢洗店,快洗店洗餐巾需要m天,每块花费f元:慢洗店洗餐巾需要n天,每块餐巾s元(m & ...

  6. 洛谷 1004 dp或最大费用流

    思路: dp方法: 设dp[i][j][k][l]为两条没有交叉的路径分别走到(i,j)和(k,l)处最大价值. 则转移方程为 dp[i][j][k][l]=max(dp[i-1][j][k-1][l ...

  7. 洛谷 P1251 餐巾计划问题

    题目链接 最小费用最大流. 每天拆成两个点,早上和晚上: 晚上可以获得\(r_i\)条脏毛巾,从源点连一条容量为\(r_i\),费用为0的边. 早上要供应\(r_i\)条毛巾,连向汇点一条容量为\(r ...

  8. 洛谷P4003 无限之环(费用流)

    传送门 神仙题啊……不看题解我可能一年都不一定做得出来……FlashHu大佬太强啦 到底是得有怎样的脑回路才能一眼看去就是费用流啊…… 建好图之后套个板子就好了,那么我们着重来讨论一下怎么建图 首先, ...

  9. 洛谷P4012 深海机器人问题(费用流)

    题目描述 深海资源考察探险队的潜艇将到达深海的海底进行科学考察. 潜艇内有多个深海机器人.潜艇到达深海海底后,深海机器人将离开潜艇向预定目标移动. 深海机器人在移动中还必须沿途采集海底生物标本.沿途生 ...

随机推荐

  1. UML和模式应用4:初始阶段(4)--需求制品之用例模型模板示例

    1. 前言 UP开发包括四个阶段:初始阶段.细化阶段.构建阶段.移交阶段: UP每个阶段包括 业务建模.需求.设计等科目: 其中需求科目对应的需求制品包括:设想.业务规则.用例模型.补充性规格说明.词 ...

  2. insmod 时报错“Unknown symbol”问题的解决

    在加载驱动模块时报错: “ Unknown symbol CFG80211_SupBandReInit (err 0)” 查看了内核代码以及加载上的symbol(命令为 cat /proc/kalls ...

  3. swoole 安装方法

    http://www.cnblogs.com/tudou1223/p/4530280.html 最近想用PHP写一个聊天网站,于是注意到了swoole这个扩展,看上它就是因为事件驱动异步非阻塞. Sw ...

  4. ThinkPHP 框架2.1,2.2和3.0版本开启lite模式导致URL命令执行漏洞

    在开启了Lite模式后,在ThinkPHP/extend/Mode/Lite/Dispatcher.class.php中第73行: // 解析剩余的URL参数 $res = preg_replace( ...

  5. Android Studio gradle配置详解

    android gradle配置详解 AppExtension类及其属性 可能大部分人看到AppExtension类会感觉到非常的陌生,其实我们在app中的build.gradle中填写配置信息的时候 ...

  6. 安装sass报错

    ERROR in Cannot find module 'node-sass' 执行:npm install sass-loader node-sass webpack --save-dev即可

  7. webstrom里面的html页面设置

    代码: <!DOCTYPE html> <html lang="zh"> <head> <meta charset="UTF-8 ...

  8. Stanford CS231n - Convolutional Neural Networks for Visual Recognition

    网易云课堂上有汉化的视频:http://study.163.com/course/courseLearn.htm?courseId=1003223001#/learn/video?lessonId=1 ...

  9. composer卸载重装

    $ composer remove phpunit/phpunit --dev $ composer require phpunit/phpunit --dev

  10. php数组去重(一维数组)

    <?php $arr = ['1', '1', 'PHP', 'PHP', 2, 3]; print_r($arr); echo "<br>"; print_r( ...