某软件公司正在规划一项n天的软件开发计划,根据开发计划第i天需要ni个软件开发人员,为了提高软件开发人员的效率,公司给软件人员提供了很多的服务,其中一项服务就是要为每个开发人员每天提供一块消毒毛巾,这种消毒毛巾使用一天后必须再做消毒处理后才能使用。消毒方式有两种,A种方式的消毒需要a天时间,B种方式的消毒需要b天(b>a),A种消毒方式的费用为每块毛巾fA, B种消毒方式的费用为每块毛巾fB,而买一块新毛巾的费用为f(新毛巾是已消毒的,当天可以使用);而且f>fA>fB。公司经理正在规划在这n天中,每天买多少块新毛巾、每天送多少块毛巾进行A种消毒和每天送多少块毛巾进行B种消毒。当然,公司经理希望费用最低。你的任务就是:为该软件公司计划每天买多少块毛巾、每天多少块毛巾进行A种消毒和多少毛巾进行B种消毒,使公司在这项n天的软件开发中,提供毛巾服务的总费用最低。
【bzoj1221】【HNOI2001】【软件开发】【费用流】
发布日期:2021-11-16 15:38:43
浏览次数:6
分类:技术文章
本文共 2006 字,大约阅读时间需要 6 分钟。
Description
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
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 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
关注你微信了!
[***.104.42.241]2024年03月26日 17时27分47秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
非线性可分数据最优超平面的构建
2019-04-26
子网划分相关
2019-04-26
2015/10/1日-大三了
2019-04-26
2015/12/30日-月总结(心很累,然而并没有暖用)
2019-04-26
JSP~Qing博客系统开发
2019-04-26
2015年终总结(梦想家?_?)
2019-04-26
Struts2入门~工作原理及访问Servlet API
2019-04-26
Struts2入门~常规使用
2019-04-26
Struts2入门~拦截器使用
2019-04-26
2016/5/21日-另外一种力量
2019-04-26
Android~Service+BroadcastReceiver使用
2019-04-26
2017/11/5日-记录一些碎碎念
2019-04-26
Linux学习~部署Apollo服务器(mqtt)
2019-04-26
STM32~FPU协处理器
2019-04-26
IAR一些配置
2019-04-26
esp8266/32~资源帖[持续更新]
2019-04-26
esp8266~makefile学习
2019-04-26
C语言~宏操作大全(宏定义、内置宏、__FILE__、__LINE__、##用法)
2019-04-26