[HNOI2001] 软件开发

Time Limit: 10 Sec  Memory Limit: 162 MB
Submit: 1938  Solved: 1118
[Submit][Status][Discuss]

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

HINT

 

题解:这个和网络流24题里的餐巾纸那道题一样的,有一个

   显然的贪心,没必要多买,然后

 

  1. #include<cstring>
  2. #include<cstdio>
  3. #include<algorithm>
  4. #include<iostream>
  5. #include<cmath>
  6. #include<queue>
  7.  
  8. #define N 1007
  9. #define inf 1000000007
  10. using namespace std;
  11. inline int read()
  12. {
  13. int x=,f=;char ch=getchar();
  14. while(!isdigit(ch)){if(ch=='-')f=-;ch=getchar();}
  15. while(isdigit(ch)){x=(x<<)+(x<<)+ch-'';ch=getchar();}
  16. return x*f;
  17. }
  18.  
  19. int n,a,b,f,fa,fb,S,T;
  20. bool boo[N<<];
  21. int dis[N<<];
  22. int cnt=,hed[N<<],nxt[N<<],rea[N<<],val[N<<],fee[N<<];
  23. struct Node
  24. {
  25. int e,fa;
  26. void init()
  27. {
  28. e=fa=-;
  29. }
  30. }e[N<<];
  31.  
  32. void add(int u,int v,int z,int w)
  33. {
  34. nxt[++cnt]=hed[u];
  35. hed[u]=cnt;
  36. rea[cnt]=v;
  37. val[cnt]=z;
  38. fee[cnt]=w;
  39. }
  40. void add_two_way(int u,int v,int z,int w)
  41. {
  42. add(u,v,z,w);
  43. add(v,u,,-w);
  44. }
  45. bool Spfa()
  46. {
  47. for (int i=S;i<=T;i++)
  48. dis[i]=inf,e[i].init(),boo[i]=false;
  49. queue<int>q;
  50. q.push(S);boo[S]=true,dis[S]=;
  51. while(!q.empty())
  52. {
  53. int u=q.front();q.pop();
  54. for (int i=hed[u];i!=-;i=nxt[i])
  55. {
  56. int v=rea[i],cost=fee[i];
  57. if (dis[v]>dis[u]+cost&&val[i]>)
  58. {
  59. dis[v]=dis[u]+cost;
  60. e[v].fa=u,e[v].e=i;
  61. if (!boo[v])
  62. {
  63. boo[v]=true;
  64. q.push(v);
  65. }
  66. }
  67. }
  68. boo[u]=false;
  69. }
  70. if (dis[T]!=inf) return true;
  71. else return false;
  72. }
  73. int mfmc()
  74. {
  75. int ans=;
  76. while(Spfa())
  77. {
  78. int x=inf;
  79. for (int i=T;e[i].fa!=-;i=e[i].fa)
  80. x=min(x,val[e[i].e]);
  81. ans+=dis[T]*x;
  82. for (int i=T;e[i].fa!=-;i=e[i].fa)
  83. val[e[i].e]-=x,val[e[i].e^]+=x;
  84. }
  85. return ans;
  86. }
  87. int main()
  88. {
  89. memset(hed,-,sizeof(hed));
  90. n=read(),a=read(),b=read(),f=read(),fa=read(),fb=read();
  91. S=,T=n*+;
  92. for (int i=;i<=n;i++)
  93. {
  94. if (i+a+<=n) add_two_way(i,i+n+a+,inf,fa);
  95. if (i+b+<=n) add_two_way(i,i+n+b+,inf,fb);
  96. if (i+<=n) add_two_way(i,i+,inf,);
  97. }
  98. for (int i=;i<=n;i++)
  99. {
  100. int x=read();
  101. add_two_way(S,i,x,);
  102. add_two_way(S,i+n,x,f);
  103. add_two_way(i+n,T,x,);
  104. }
  105. printf("%d\n",mfmc());
  106. }

bzoj 1221 [HNOI2001] 软件开发 费用流的更多相关文章

  1. BZOJ 1221 [HNOI2001] 软件开发 费用流_建模

    题目描述:   某软件公司正在规划一项n天的软件开发计划,根据开发计划第i天需要ni个软件开发人员,为了提高软件开发人员的效率,公司给软件人员提供了很多的服务,其中一项服务就是要为每个开发人员每天提供 ...

  2. BZOJ 1221: [HNOI2001] 软件开发(最小费用最大流)

    不知道为什么这么慢.... 费用流,拆点.... --------------------------------------------------------------------------- ...

  3. BZOJ 1221: [HNOI2001] 软件开发

    1221: [HNOI2001] 软件开发 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 1428  Solved: 791[Submit][Stat ...

  4. BZOJ 3280: 小R的烦恼 & BZOJ 1221: [HNOI2001] 软件开发

    3280: 小R的烦恼 Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 399  Solved: 200[Submit][Status][Discuss ...

  5. [BZOJ 1221] [HNOI2001] 软件开发 【费用流 || 三分】

    题目链接:BZOJ - 1221 题目分析 算法一:最小费用最大流 首先这是一道经典的网络流问题.每天建立两个节点,一个 i 表示使用毛巾,一个 i' 表示这天用过的毛巾. 然后 i 向 T 连 Ai ...

  6. BZOJ 1221: [HNOI2001] 软件开发【最小费用最大流】

    Description 某软件公司正在规划一项n天的软件开发计划,根据开发计划第i天需要ni个软件开发人员,为了提高软件开发人员的效率,公司给软件人员提供了很多的服务,其中一项服务就是要为每个开发人员 ...

  7. 【bzoj1221】[HNOI2001] 软件开发 费用流

    题目描述 某软件公司正在规划一项n天的软件开发计划,根据开发计划第i天需要ni个软件开发人员,为了提高软件开发人员的效率,公司给软件人员提供了很多的服务,其中一项服务就是要为每个开发人员每天提供一块消 ...

  8. BZOJ1221 [HNOI2001]软件开发 - 费用流

    题解 非常显然的费用流. 但是建图还是需要思考的QuQ 将每天分成两个节点 $x_{i,1}, x_{i,2} $, $ x_{i,1}$用于提供服务, $x_{i ,2}$ 用来从源点获得$nd[i ...

  9. BZOJ 1221 [HNOI2001] 软件开发(费用流)

    [题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=1221 [题目大意] 每天对毛巾都有一定的需求ni,每天可以花f价值每条购买毛巾, 当天 ...

随机推荐

  1. Laxcus大数据管理系统2.0(6)- 第四章 数据计算

    第四章 数据计算 Laxcus所有数据计算工作都是通过网络实施.相较于集中计算,在网络间进行的数据计算更适合处理那些数据量大.复杂的.耗时长的计算任务.能够实施网络计算的前提是数据可以被分割,就是把一 ...

  2. docker容器学习笔记

    docker是通过内核虚拟化技术来提供容器的资源隔离与安全保障. docker组成: docker client.docker server.docker组件(镜像(image).容器(contain ...

  3. 软件工程 作业part3 读后感

    匆匆看完构建之法,觉得这种不认真看完书就去写随笔去评价这本书是对作者的不尊重,所以觉得应该提问题和写感悟. 我的一点拙见,提的问题在现在这个信息发达的时候感觉只要有时间都可以自己解决. 感觉软件工程这 ...

  4. 使用cout进行格式化

    以下内容摘自木缥缈的博客 使用cout进行格式化 ostream插入运算符将值转换为文本格式.在默认情况下,格式化值的方式如下. * 对于char值,如果它代表的是可打印字符,则将被作为一个字符显示在 ...

  5. MVC4 DropDownList (二) — 省市联动

    1.添加省份和城市类 //省份 public class Province { public int Id { get; set; } public string Name { get; set; } ...

  6. How To Disable MacBook ProTrackpad

    How To Disable MacBook Pro Trackpad how to close macbook pro touchpad? https://www.wikihow.com/Chang ...

  7. [C/C++] 友元函数和友元类

    A---友元函数: class Data{ public: ... friend int f(int &m);//友元函数 ... } 友元函数是可以直接访问类的私有成员的非成员函数.它是定义 ...

  8. java直接访问JNDI工具代码

    import java.sql.*; import java.util.*; import javax.naming.*; import javax.sql.DataSource; public cl ...

  9. 【bzoj5049】[Lydsy九月月赛]导航系统 并查集+双向BFS最短路

    题目描述 给你一张 $n$ 个点 $m$ 条边的随机图,边权为1.$k$ 次询问两点间最短路,不连通则输出-1. 输入 第一行包含3个正整数n,m,k(2<=n<=100000,1< ...

  10. 【题解】CF#1012 C-Hill

    感觉这题的状态还是比较明显的.设置状态 \(f[i][j][0/1]\) 表示dp到第 \(i\) 个位置,前面(包括这里)已经出现了 \(j\) 个山峰,当前位置是不是山峰即可 dp.这样的状态有一 ...