bzoj:1221;vijos 1552 软件开发
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
8 2 1 6
Sample Output
for (i=1;i<=n;i++) v=read(),in(S,i,v,0),in(i+n,T,v,0),in(S,i+n,INF,f);
for (i=1;i<n-a;i++) in(i,i+n+a+1,INF,fa);
for (i=1;i<n-d;i++) in(i,i+n+d+1,INF,fb);//这里的d其实是原题的b
for (i=1;i<n;i++) in(i,i+1,INF,0);
#include<queue> #include<cstdio> #include<cstring> #include<algorithm> #define MAXN 2100 #define MAXM 12000 using namespace std;struct na{int y,z,f,ne; }; int n,m,l[MAXN],r[MAXN],num=0,p,ch,ans=0,S,T,k,dis[MAXN],an=0,mi[MAXN],ro[MAXN],qi[MAXN],a,d,fa,fb,f,v; na b[MAXM]; bool bo[MAXN]; const int INF=1e9; queue <int> q; inline int min(int x,int y){return x>y?y:x;} inline int read(){p=0;ch=getchar();while (ch<'0'||ch>'9') ch=getchar();while (ch>='0'&&ch<='9') p=p*10+ch-48, ch=getchar();return p; } inline void spfa(){register int i;q.push(S);bo[S]=1;for (i=0;i<MAXN;i++) dis[i]=INF;mi[S]=INF;dis[S]=0;while(!q.empty()){int k=q.front();q.pop();bo[k]=0;if (k==T) continue;for (i=l[k];i;i=b[i].ne){if (b[i].z>0&&dis[b[i].y]>b[i].f+dis[k]){dis[b[i].y]=b[i].f+dis[k];mi[b[i].y]=min(mi[k],b[i].z);ro[b[i].y]=i;qi[b[i].y]=k;if (!bo[b[i].y]){bo[b[i].y]=1;q.push(b[i].y);}}}} } inline int add(int x,int y,int z,int f){num++;if (l[x]==0) l[x]=num;else b[r[x]].ne=num;b[num].y=y;b[num].z=z;b[num].f=f;r[x]=num; } inline void in(int x,int y,int z,int f){add(x,y,z,f),add(y,x,0,-f); } int main(){register int i,j;n=read();a=read();d=read();f=read();fa=read();fb=read();S=2*n+1;T=2*n+2;for (i=1;i<=n;i++) v=read(),in(S,i,v,0),in(i+n,T,v,0),in(S,i+n,INF,f);for (i=1;i<n-a;i++) in(i,i+n+a+1,INF,fa);for (i=1;i<n-d;i++) in(i,i+n+d+1,INF,fb);for (i=1;i<n;i++) in(i,i+1,INF,0);for(;;){spfa();if (dis[T]==INF) break;an+=mi[T]*dis[T];for (i=T;i;i=qi[i]) b[ro[i]].z-=mi[T],b[((ro[i]-1)^1)+1].z+=mi[T];}printf("%d\n",an); }
转载于:https://www.cnblogs.com/Enceladus/p/5187502.html
bzoj:1221;vijos 1552 软件开发相关推荐
- BZOJ 1221: [HNOI2001] 软件开发(最小费用最大流)
不知道为什么这么慢.... 费用流,拆点.... --------------------------------------------------------------------------- ...
- [BZOJ 1221][HNOI2001]软件开发(费用流)
Description 某软件公司正在规划一项n天的软件开发计划,根据开发计划第i天需要ni个软件开发人员,为了提高软件开发人员的效率,公司给软件人员提供了很多的服务,其中一项服务就是要为每个开发人员 ...
- 【软件工程】RUP与软件开发5大模型
软件开发的5大模型 1.瀑布模型:按照人的思维一步一步的开发下去,如果需求分析得当,每个阶段顺利,结果还不错! 2.快速原型模型:后来人们发现,自己不可能一下子就把所有的需求搞清楚,总是在开发的过程中 ...
- 【快速上手mac必备】常用优质mac软件推荐(音视频、办公、软件开发、辅助工具、系统管理、云存储)
本文章的主要内容是我作为一名大四学生.准程序员.up主这三种身份来给大家推荐一下 mac 上好用的软件以及工具.本人也是从去年9月份开始从windows阵营转移到了mac阵营,刚开始使用的时候,也曾主 ...
- 一则android软件开发工程师的招聘信息
岗位职责: 从事Android平台的客户端软件开发 任职资格: 1.一年以上Android平台开发经验: 2.两年以上Java开发经验: 3.熟悉Android开发架构和API调用: 4.熟悉HTTP ...
- ubuntu14.04如何在线安装eclipse以及C/C++开发组件,搭建软件开发平台
在ubuntu14.04操作系统中进行C/C++软件开发,需要安装eclipse以及CDT等各种组件,下载安装包一一安装,之后再进行各种配置可能比较麻烦,在这里推荐一种在线安装方式,安装配置较为方便. ...
- (广州)软件开发定制服务,工作流引擎 OA 库存管理系统
本人专注于工作流的研究设计同时提供软件开发定制服务,工作流引擎 OA系统 库存管理系统 如果有机会合作共事请联系:15817167503(本人在广州) QQ:1311663711 加时请注明软件定制 ...
- 每个程序员必看:如何在40岁后继续做软件开发?
导读: 这是一个 42 岁的开发者所写经验分享文章.并且列出一些他 18 年多身为软件开发者的经验谈.许多部分看完后都会希望自己当时就能够了解,所以很推荐不论是新手或是老手都要好好阅读这一篇文章. 故 ...
- 为什么Scrum模式适合软件开发?
2019独角兽企业重金招聘Python工程师标准>>> 摘自基于Visual Studio 2010 进行敏捷/Scrum模式开发 软件行业至今已经有超过40年的历史,很多在软件工程 ...
最新文章
- jQuery简单实现遍历的方法
- html Selection
- python3moduleoftheweek中文_[翻译]Python Module of The Week: Counter
- Android广播机制:Broadcast
- Qt调用face++的http接口,实现人脸对比
- python django 数据库查询方法总结
- [JS进阶] JS 之Blob 对象类型
- 使用webbench进行压力测试
- MATLAB图像处理之图像去模糊处理
- cmd常用命令 cmd打开文件软件等
- PID参数整定——Z-N方法
- win10操作系统上编译assimp库
- DLL注入 + VEH 的方式处理异常
- 计算机开题报告万能模板,计算机开题报告ppt模板
- 大数据压缩处理:数据分卷压缩和分卷压缩解压
- 单服务器node.js和php性能测试
- stm32 DMA2D使用中断LVGL,提高LVGL帧率
- 【微信小程序】---- redux 在原生微信小程序的使用实例
- 掌握正确的运动姿势,很有必要!
- win10(专业版): L2TP连接尝试失败,因为安全层再初始化与远程计算机的协商时遇到一个处理错误。