2424: [HAOI2010]订货

Time Limit: 10 Sec  Memory Limit: 128 MB
Submit: 915  Solved: 639
[Submit][Status][Discuss]

Description

某公司估计市场在第i个月对某产品的需求量为Ui,已知在第i月该产品的订货单价为di,上个月月底未销完的单位产品要付存贮费用m,假定第一月月初的库存量为零,第n月月底的库存量也为零,问如何安排这n个月订购计划,才能使成本最低?每月月初订购,订购后产品立即到货,进库并供应市场,于当月被售掉则不必付存贮费。假设仓库容量为S。

Input

第1行:n, m, S (0<=n<=50, 0<=m<=10, 0<=S<=10000)
第2行:U1 , U2 , ... , Ui , ... , Un (0<=Ui<=10000)
第3行:d1 , d2 , ..., di , ... , dn (0<=di<=100)

Output

只有1行,一个整数,代表最低成本

Sample Input

3 1 1000
2 4 8
1 2 4

Sample Output

34

HINT

 

Source

[Submit][Status][Discuss]

动态规划。

一开始看到题面的时候以为是那道经典的贪心问题,就是维护当前最优单价,不断转移。

然而这道题限制了仓库的容量,使得最优单价不能直接向后转移,所以需要动态规划。

设$f[i][j]$表示经过了第$i$个月(此时已经到了月底),仓库中剩余量为$j$的当前最小费用。

转移如下:

$f[i][j+1]=min(f[i][j+1],f[i][j]+D_{i})$ 表示可以在本月额外购进一单位作为储存。

当$j \geq U_{i+1}$, $f[i+1][j-U_{i+1}]=min(f[i+1][j-U_{i+1}],f[i][j]+M*j$ 表示如果当前储备够下个月出售,下个月可以不购进商品,只需支付两个月之间的储存费用。

当$j \lt U_{i+1}$, $f[i+1][0]=min(f[i+1][0],f[i][j]+M*j+(U_{i+1}-j)*D_{i+1}$ 表示如果当前储备不够下个月,下个月除了需要支付储存费用,还需要额外购进一些商品。

  1. #include <cstdio>
  2.  
  3. inline int nextChar(void)
  4. {
  5. const static int siz = ;
  6.  
  7. static char buf[siz];
  8. static char *hd = buf + siz;
  9. static char *tl = buf + siz;
  10.  
  11. if (hd == tl)
  12. fread(hd = buf, , siz, stdin);
  13.  
  14. return *hd++;
  15. }
  16.  
  17. inline int nextInt(void)
  18. {
  19. register int ret = ;
  20. register int neg = false;
  21. register int bit = nextChar();
  22.  
  23. for (; bit < ; bit = nextChar())
  24. if (bit == '-')neg ^= true;
  25.  
  26. for (; bit > ; bit = nextChar())
  27. ret = ret * + bit - ;
  28.  
  29. return neg ? -ret : ret;
  30. }
  31.  
  32. const int inf = 1e9;
  33. const int maxn = ;
  34. const int maxm = ;
  35.  
  36. int N, M, S;
  37. int U[maxn];
  38. int D[maxn];
  39.  
  40. int f[maxn][maxm];
  41.  
  42. inline void Min(int &a, const int &b)
  43. {
  44. if (a > b)a = b;
  45. }
  46.  
  47. signed main(void)
  48. {
  49. N = nextInt();
  50. M = nextInt();
  51. S = nextInt();
  52.  
  53. for (int i = ; i <= N; ++i)
  54. U[i] = nextInt();
  55.  
  56. for (int i = ; i <= N; ++i)
  57. D[i] = nextInt();
  58.  
  59. for (int i = ; i <= N; ++i)
  60. for (int j = ; j <= S; ++j)
  61. f[i][j] = inf;
  62.  
  63. f[][] = D[] * U[];
  64.  
  65. for (int i = ; i <= N; ++i)
  66. for (int j = ; j <= S; ++j)
  67. if (f[i][j] < inf)
  68. {
  69. Min(f[i][j + ], f[i][j] + D[i]);
  70. if (j >= U[i + ])
  71. Min(f[i + ][j - U[i + ]], f[i][j] + j * M);
  72. else
  73. Min(f[i + ][], f[i][j] + (U[i + ] - j) * D[i + ] + j * M);
  74. }
  75.  
  76. int ans = inf;
  77.  
  78. for (int i = ; i <= S; ++i)
  79. Min(ans, f[N][i]);
  80.  
  81. printf("%d\n", ans);
  82. }

突然,机房小伙伴们惊奇地看我:“这特么不是裸的费用流吗?”

WOC,我是有多蠢,去想DP?LTY神犇要来HACK我了,好怕怕~~~

补上最小费用流代码……

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

@Author: YouSiki

BZOJ 2424: [HAOI2010]订货的更多相关文章

  1. BZOJ 2424: [HAOI2010]订货 费用流

    2424: [HAOI2010]订货 Description 某公司估计市场在第i个月对某产品的需求量为Ui,已知在第i月该产品的订货单价为di,上个月月底未销完的单位产品要付存贮费用m,假定第一月月 ...

  2. BZOJ 2424: [HAOI2010]订货(最小费用最大流)

    最小费用最大流..乱搞即可 ------------------------------------------------------------------------------ #includ ...

  3. BZOJ 2424: [HAOI2010]订货(费用流)

    裸的费用流了= =从源点向每个点连费用为di,从汇点向每个点连流量为ui,每个点向下一个点连费用为m,流量为s的边就行了 CODE: #include<cstdio>#include< ...

  4. bzoj 2424: [HAOI2010]订货 (费用流)

    直接费用流,天数就是点数 type arr=record toward,next,cap,cost:longint; end; const maxm=; maxn=; mm=<<; var ...

  5. 2424: [HAOI2010]订货

    2424: [HAOI2010]订货 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 922  Solved: 642[Submit][Status][ ...

  6. 2424. [HAOI2010]订货【费用流】

    Description 某公司估计市场在第i个月对某产品的需求量为Ui,已知在第i月该产品的订货单价为di,上个月月底未销完的单位产品要付存贮费用m,假定第一月月初的库存量为零,第n月月底的库存量也为 ...

  7. 【BZOJ2424】[HAOI2010]订货(费用流)

    [BZOJ2424][HAOI2010]订货(费用流) 题面 BZOJ 洛谷 题解 傻逼费用流吧... 一开始理解错意思了,仓库大小为\(m\)的含义是留到下个月最多为\(m\),而不是任意时刻的容量 ...

  8. 【BZOJ2424】[HAOI2010]订货 最小费用流

    [BZOJ2424][HAOI2010]订货 Description 某公司估计市场在第i个月对某产品的需求量为Ui,已知在第i月该产品的订货单价为di,上个月月底未销完的单位产品要付存贮费用m,假定 ...

  9. bzoj2424 [HAOI2010]订货 dp+单调性

    [HAOI2010]订货 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 1311  Solved: 884[Submit][Status][Discu ...

随机推荐

  1. 通过JAXB完成Java对象与XML之间的转换

    Java对象转换XML的过程叫marshal. XML转换到Java对象的过程叫unmarshal. 一.Java对象转化为XML 这里省略getter和setter方法 通过标注@XMLRootEl ...

  2. Atitit.eclise的ide特性-------abt 编译

    Atitit.eclise的ide特性-------abt 编译 为什么要在Intellij IDEA中使用Eclipse编译器 如果你使用Intellij Idea,你应该考虑使用Eclipse编译 ...

  3. Css3新特性应用之形状

    一.自适应椭圆 * border-radius特性:    * 可以单独指定水平和垂直半径,并且值可以是百分比,用/(斜杠)分隔这两个值即可(可以实现自适应宽度椭圆).    * 还可以单独指定四个角 ...

  4. 移动web开发调试工具AlloyLever介绍

    简介 web调试有几个非常频繁的刚需:看log.看error.看AJAX发包与回包.其他的如timeline和cookie以及localstorage就不是那么频繁,但是AlloyLever都支持.如 ...

  5. 传统软件和SaaS,差异究竟在哪里

    这篇文章从创业起步阶段.产品形态和产品策略.市场竞争格局三个方面比较了中美 SaaS 领域的异同,在文章的最后,作者根据自己在 Box 的工作经历对在国内做 SaaS 的公司提出了四点建议. 我曾有幸 ...

  6. MBProgressHUD 显示后,为何不能点击屏幕其他地方

    解决办法: hud.userInteractionEnabled= NO;  就是这么简单粗暴!这个问题 我一定要发到首页候选区! /********************************* ...

  7. [Erlang 0123] Erlang EPMD

     epmd进程和Erlang节点进程如影随形,在Rabbitmq集群,Ejabberd集群,Couchbase集群产品文档中都会有相当多的内容讲epmd,epmd是什么呢?   epmd 是Erlan ...

  8. apache下htaccess不起作用,linux,windows详解

    可能出现下面这三种的错误可能性: 第一种:启用 rewrite 和 .htaccess 设置 rewrite设置:找到apache的配置文件httpd.conf文件,找到:#LoadModule re ...

  9. 创建docker私人仓库

    关于创建docker私人仓库 1.1.           安装步骤 1.1.1.            直接从公共库上面下载register镜像在本地执行 1.1.1.1.             ...

  10. 直播推流之blibli和拉流LFLiveKit

    执行上面操作后,导入合成的拉流blibli包到工程中,然后新建个播放控制器来设置播放 1.  播放的一些操作. 2. 高斯模糊. 3. 新建聊天控制器. - (void)viewDidLoad { [ ...