1221: [HNOI2001] 软件开发

Time Limit: 10 Sec  Memory Limit: 162 MB
Submit: 1428  Solved: 791
[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

 

Source

 

[Submit][Status][Discuss]

最小费用最大流,各种调代码。

把每一天拆点,分为Xi和Yi。可以理解X为未消毒,Y为已消毒。

源点向Xi供应Ni个费用为0的流量,代表每天产生的用过的毛巾。

Yi向汇点连容量Ni的费用为0的边,代表每天使用的毛巾。

源点向Yi连费用为F的边,容量无穷,代表可以新购毛巾。

Xi向Yi+A+1连费用为Fa的边,代表可以在i时送去消毒,i+A+1时使用;B同理。

Xi向Xi+1连边,代表今天的脏毛巾可以留着回头再拿来洗。

  1. #include <bits/stdc++.h>
  2.  
  3. inline int get_c(void)
  4. {
  5. static const int siz = ;
  6.  
  7. static char buf[siz];
  8. static char *head = buf + siz;
  9. static char *tail = buf + siz;
  10.  
  11. if (head == tail)
  12. fread(head = buf, , siz, stdin);
  13.  
  14. return *head++;
  15. }
  16.  
  17. inline int get_i(void)
  18. {
  19. register int ret = ;
  20. register int neg = false;
  21. register int bit = get_c();
  22.  
  23. for (; bit < ; bit = get_c())
  24. if (bit == '-')neg ^= true;
  25.  
  26. for (; bit > ; bit = get_c())
  27. ret = ret * + bit - ;
  28.  
  29. return neg ? -ret : ret;
  30. }
  31.  
  32. const int inf = 2e9;
  33. const int maxn = ;
  34.  
  35. int n, a, b, f, c, d;
  36.  
  37. int s, t;
  38. int edges;
  39. int hd[maxn];
  40. int to[maxn];
  41. int fl[maxn];
  42. int vl[maxn];
  43. int nt[maxn];
  44.  
  45. inline void add(int u, int v, int f, int w) {
  46. nt[edges] = hd[u]; to[edges] = v; fl[edges] = f; vl[edges] = +w; hd[u] = edges++;
  47. nt[edges] = hd[v]; to[edges] = u; fl[edges] = ; vl[edges] = -w; hd[v] = edges++;
  48. }
  49.  
  50. int dis[maxn];
  51. int pre[maxn];
  52.  
  53. inline bool bfs(void) {
  54. static int que[maxn];
  55. static int inq[maxn];
  56. static int head, tail;
  57.  
  58. for (int i = s; i <= t; ++i)dis[i] = inf;
  59. memset(inq, , sizeof(inq));
  60. que[tail++] = s;
  61. pre[s] = -;
  62. dis[s] = ;
  63. inq[s] = ;
  64.  
  65. while (head != tail) {
  66. int u = que[head++], v; inq[u] = ;
  67. if (head == maxn)head = ;
  68. for (int i = hd[u]; ~i; i = nt[i])
  69. if (fl[i] && dis[v = to[i]] > dis[u] + vl[i]) {
  70. dis[v] = dis[u] + vl[i];
  71. pre[v] = i ^ ;
  72. if (!inq[v]) {
  73. inq[que[tail++] = v];
  74. if (tail == maxn)
  75. tail = ;
  76. }
  77. }
  78. }
  79.  
  80. return dis[t] < inf;
  81. }
  82.  
  83. inline int minCost(void) {
  84. int cost = ;
  85.  
  86. while (bfs()) {
  87. int flow = inf;
  88.  
  89. for (int i = pre[t]; ~i; i = pre[to[i]])
  90. flow = std::min(flow, fl[i ^ ]);
  91.  
  92. for (int i = pre[t]; ~i; i = pre[to[i]])
  93. fl[i] += flow, fl[i ^ ] -= flow;
  94.  
  95. cost += flow * dis[t];
  96. }
  97.  
  98. return cost;
  99. }
  100.  
  101. signed main(void)
  102. {
  103. memset(hd, -, sizeof(hd));
  104.  
  105. n = get_i();
  106. a = get_i();
  107. b = get_i();
  108. f = get_i();
  109. c = get_i();
  110. d = get_i();
  111.  
  112. s = , t = (n + ) * + ;
  113.  
  114. for (int i = ; i <= n; ++i) {
  115. int x = get_i();
  116. add(s, i, x, );
  117. add(i + n, t, x, );
  118. add(s, i + n, inf, f);
  119. if (i + <= n)
  120. add(i, i + , inf, );
  121. if (i + a + <= n)
  122. add(i, i + a + + n, inf, c);
  123. if (i + b + <= n)
  124. add(i, i + b + + n, inf, d);
  125. }
  126.  
  127. printf("%d\n", minCost());
  128. }

@Author: YouSiki

BZOJ 1221: [HNOI2001] 软件开发的更多相关文章

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

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

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

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

  3. bzoj 1221 [HNOI2001] 软件开发 费用流

    [HNOI2001] 软件开发 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 1938  Solved: 1118[Submit][Status][D ...

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

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

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

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

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

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

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

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

  8. bzoj 1221: [HNOI2001] 软件开发 (网络流)

    注意说如果直接从每天的新的连向旧的,那整个图的最大流还是不变,答案就一直会是Σni*f type arr=record toward,next,cap,cost:longint; end; const ...

  9. 【BZOJ 1221】 1221: [HNOI2001] 软件开发 (最小费用流)

    1221: [HNOI2001] 软件开发 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 1581  Solved: 891 Description ...

随机推荐

  1. php实现设计模式之 状态模式

    <?php /*状态模式:允许一个对象在其内部状态改变时改变它的行为.对象看起来似乎修改了它的类.(行为模式) * * 在很多情况下,一个对象的行为取决于一个或多个动态变化的属性,这样的属性叫做 ...

  2. JDBC介绍

    1.DriverManager用来建立和数据库的链接以及管理JDBC驱动程序 driverManager的常用方法 方法 描述 registerDriver(Driver driver) 在Derve ...

  3. java基础2.-------interface接口类,实现接口

    1.为什么使用接口,是把功能方法都写在一个类中,在其他需要调用的时候,通过implements实现该接口 2.接口可以继承多个父类接口,在实现接口的时候,实现类实现所有方法 3.在接口类写方法时,自动 ...

  4. input文本框录入字母自动大写

    向文本框输入文字时,如何让小写字母自动变为大写呢?有一个简单有效的做法是用CSS. <input name="t1" type="text" style= ...

  5. safari cookie设置中文失败

    最近用H5进行手机端开发,由于是window操作系统,为了方便开发和调试,直接在chrome浏览器上进行测试,然后在android机上进行手机端测试,当功能基本完工后,原来在android上运行正常的 ...

  6. 关于XHR对象中status范围的记录

    if(xhr.status >= 200 && xhr.status < 300 || xhr.status == 304){ // 成功执行区域 // 2XX表示有效响应 ...

  7. javascript的defer和async的区别。

    我们常用的script标签,有两个和性能.js文件下载执行相关的属性:defer和async defer的含义[摘自https://developer.mozilla.org/En/HTML/Elem ...

  8. 北京54全国80及WGS84坐标系的相互转换

    这三个坐标系统是当前国内较为常用的,它们均采用不同的椭球基准.其中北京54坐标系,属三心坐标系,大地原点在苏联的普而科沃,长轴6378245m,短轴6356863,扁率1/298.3:西安80坐标系, ...

  9. ArcGIS Engine开发之地图基本操作(3)

    地图数据的加载 一.加载Shapefile数据 Shapefile文件是目前主流的一种空间数据的文件存储方式,也是不同GIS软件进行数据格式转换常用的中间格式.加载Shapefile数据的方式有两种: ...

  10. 聊天气泡 button backgroundImage uiimage 拉伸 stretchableImageWithLeftCapWidth: 方法的使用

    - (UIImage *)stretchableImageWithLeftCapWidth:(NSInteger)leftCapWidth topCapHeight:(NSInteger)topCap ...