【bzoj1221】【HNOI2001】【软件开发】【费用流】
发布日期:2021-11-16 15:38:43 浏览次数:6 分类:技术文章

本文共 2006 字,大约阅读时间需要 6 分钟。

Description

某软件公司正在规划一项n天的软件开发计划,根据开发计划第i天需要ni个软件开发人员,为了提高软件开发人员的效率,公司给软件人员提供了很多的服务,其中一项服务就是要为每个开发人员每天提供一块消毒毛巾,这种消毒毛巾使用一天后必须再做消毒处理后才能使用。消毒方式有两种,A种方式的消毒需要a天时间,B种方式的消毒需要b天(b>a),A种消毒方式的费用为每块毛巾fA, B种消毒方式的费用为每块毛巾fB,而买一块新毛巾的费用为f(新毛巾是已消毒的,当天可以使用);而且f>fA>fB。公司经理正在规划在这n天中,每天买多少块新毛巾、每天送多少块毛巾进行A种消毒和每天送多少块毛巾进行B种消毒。当然,公司经理希望费用最低。你的任务就是:为该软件公司计划每天买多少块毛巾、每天多少块毛巾进行A种消毒和多少毛巾进行B种消毒,使公司在这项n天的软件开发中,提供毛巾服务的总费用最低。

Input

第1行为n,a,b,f,fA,fB. 第2行为n1,n2,……,nn. (注:1≤f,fA,fB≤60,1≤n≤1000)

Output

最少费用

Sample Input

4 1 2 3 2 1
8 2 1 6

Sample Output

38
题解:
标准的餐巾计划问题
把每天拆成两个点(a,b),b表示从当天买毛巾,a表示从当天送毛巾。
源点向b连流量为inf,费用为毛巾单价的边。
b向汇点连流量为当天所需毛巾数,费用为0的边。
源点向a连流量为当天所需毛巾数,费用为0的边。
每个a向快洗和慢洗所能到达的点连流量为inf,费用为慢洗或快洗费用的边。
每个a向下一个a连流量inf,费用为0的边。
代码:
#include
#include
#include
#define N 3000#define M 20000#define inf 2100000000using namespace std;int T,point[N],pre[N],ans,cnt(1),x,next[M<<1],n,m,a,b,fa,fb,p,f[N],dis[N],q[N*10];struct use{int st,en,v,c;}e[M<<1];void add(int x,int y,int v,int c){ next[++cnt]=point[x];point[x]=cnt; e[cnt].st=x;e[cnt].en=y;e[cnt].v=v;e[cnt].c=c; next[++cnt]=point[y];point[y]=cnt; e[cnt].st=y;e[cnt].en=x;e[cnt].v=0;e[cnt].c=-c;} bool spfa(){ int h(0),t(1); for (int i=1;i<=T;i++) dis[i]=inf,f[i]=0; f[1]=1;dis[1]=0;q[t]=1; while (h
dis[u]+e[i].c){ pre[e[i].en]=i;dis[e[i].en]=dis[u]+e[i].c; if (!f[e[i].en]){ f[e[i].en]=1; q[++t]=e[i].en; } } } return dis[T]!=inf;}void isap(){ int mn=inf; for (int i=T;i!=1;i=e[pre[i]].st) mn=min(mn,e[pre[i]].v); for (int i=T;i!=1;i=e[pre[i]].st){ e[pre[i]].v-=mn;e[pre[i]^1].v+=mn;ans+=mn*e[pre[i]].c; } }int main(){ scanf("%d%d%d%d%d%d",&n,&a,&b,&p,&fa,&fb); T=n+n+2; for (int i=1;i<=n;i++){ add(1,i+n+1,inf,p); if (i+1<=n) add(i+1,i+2,inf,0); if (i+a+1<=n) add(i+1,i+n+a+2,inf,fa); if (i+b+1<=n) add(i+1,i+n+b+2,inf,fb); } for (int i=1;i<=n;i++){ scanf("%d",&x); add(1,i+1,x,0); add(i+n+1,T,x,0); } while (spfa()) isap(); cout<
<

转载地址:https://blog.csdn.net/sunshinezff/article/details/51122988 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:【bzoj3993】【SDOI2015】【二分法+最大流】
下一篇:【bzoj1877】【SDOI2009】【晨跑】【费用流】

发表评论

最新留言

关注你微信了!
[***.104.42.241]2024年03月26日 17时27分47秒