BZOJ 2424: [HAOI2010]订货
2424: [HAOI2010]订货
Time Limit: 10 Sec Memory Limit: 128 MB
Submit: 915 Solved: 639
[Submit][Status][Discuss]
Description
Input
Output
只有1行,一个整数,代表最低成本
Sample Input
2 4 8
1 2 4
Sample Output
HINT
Source
动态规划。
一开始看到题面的时候以为是那道经典的贪心问题,就是维护当前最优单价,不断转移。
然而这道题限制了仓库的容量,使得最优单价不能直接向后转移,所以需要动态规划。
设$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}$ 表示如果当前储备不够下个月,下个月除了需要支付储存费用,还需要额外购进一些商品。
- #include <cstdio>
- inline int nextChar(void)
- {
- const static int siz = ;
- static char buf[siz];
- static char *hd = buf + siz;
- static char *tl = buf + siz;
- if (hd == tl)
- fread(hd = buf, , siz, stdin);
- return *hd++;
- }
- inline int nextInt(void)
- {
- register int ret = ;
- register int neg = false;
- register int bit = nextChar();
- for (; bit < ; bit = nextChar())
- if (bit == '-')neg ^= true;
- for (; bit > ; bit = nextChar())
- ret = ret * + bit - ;
- return neg ? -ret : ret;
- }
- const int inf = 1e9;
- const int maxn = ;
- const int maxm = ;
- int N, M, S;
- int U[maxn];
- int D[maxn];
- int f[maxn][maxm];
- inline void Min(int &a, const int &b)
- {
- if (a > b)a = b;
- }
- signed main(void)
- {
- N = nextInt();
- M = nextInt();
- S = nextInt();
- for (int i = ; i <= N; ++i)
- U[i] = nextInt();
- for (int i = ; i <= N; ++i)
- D[i] = nextInt();
- for (int i = ; i <= N; ++i)
- for (int j = ; j <= S; ++j)
- f[i][j] = inf;
- f[][] = D[] * U[];
- for (int i = ; i <= N; ++i)
- for (int j = ; j <= S; ++j)
- if (f[i][j] < inf)
- {
- Min(f[i][j + ], f[i][j] + D[i]);
- if (j >= U[i + ])
- Min(f[i + ][j - U[i + ]], f[i][j] + j * M);
- else
- Min(f[i + ][], f[i][j] + (U[i + ] - j) * D[i + ] + j * M);
- }
- int ans = inf;
- for (int i = ; i <= S; ++i)
- Min(ans, f[N][i]);
- printf("%d\n", ans);
- }
突然,机房小伙伴们惊奇地看我:“这特么不是裸的费用流吗?”
WOC,我是有多蠢,去想DP?LTY神犇要来HACK我了,好怕怕~~~
补上最小费用流代码……
- #include <cstdio>
- #include <cstring>
- inline char nextChar(void)
- {
- static const int siz = ;
- static char buf[siz];
- static char *hd = buf + siz;
- static char *tl = buf + siz;
- if (hd == tl)
- fread(hd = buf, , siz, stdin);
- return *hd++;
- }
- inline int nextInt(void)
- {
- register int ret = ;
- register int neg = false;
- register int bit = nextChar();
- for (; bit < ; bit = nextChar())
- if (bit == '-')neg ^= true;
- for (; bit > ; bit = nextChar())
- ret = ret * + bit - ;
- return neg ? -ret : ret;
- }
- const int siz = ;
- const int inf = ;
- int tot;
- int s, t;
- int hd[siz];
- int to[siz];
- int fl[siz];
- int vl[siz];
- int nt[siz];
- inline void add(int u, int v, int f, int w)
- {
- nt[tot] = hd[u]; to[tot] = v; fl[tot] = f; vl[tot] = +w; hd[u] = tot++;
- nt[tot] = hd[v]; to[tot] = u; fl[tot] = ; vl[tot] = -w; hd[v] = tot++;
- }
- int dis[siz];
- int pre[siz];
- inline bool spfa(void)
- {
- static int que[siz];
- static int inq[siz];
- static int head, tail;
- memset(dis, 0x3f, sizeof(dis));
- memset(inq, , sizeof(inq));
- head = , tail = ;
- que[tail++] = s;
- pre[s] = -;
- dis[s] = ;
- inq[s] = ;
- while (head != tail)
- {
- int u = que[head++], v; inq[u] = ;
- for (int i = hd[u]; ~i; i = nt[i])
- if (dis[v = to[i]] > dis[u] + vl[i] && fl[i])
- {
- dis[v] = dis[u] + vl[i], pre[v] = i ^ ;
- if (!inq[v])inq[que[tail++] = v] = ;
- }
- }
- return dis[t] < 0x3f3f3f3f;
- }
- inline int minCost(void)
- {
- int cost = , flow;
- while (spfa())
- {
- flow = inf;
- for (int i = pre[t]; ~i; i = pre[to[i]])
- if (flow > fl[i ^ ])flow = fl[i ^ ];
- for (int i = pre[t]; ~i; i = pre[to[i]])
- fl[i] += flow, fl[i ^ ] -= flow;
- cost += dis[t] * flow;
- }
- return cost;
- }
- int n, m, k;
- signed main(void)
- {
- n = nextInt();
- m = nextInt();
- k = nextInt();
- s = , t = n + ;
- memset(hd, -, sizeof(hd));
- for (int i = ; i <= n; ++i)
- add(i, t, nextInt(), );
- for (int i = ; i <= n; ++i)
- add(s, i, inf, nextInt());
- for (int i = ; i < n; ++i)
- add(i, i + , k, m);
- printf("%d\n", minCost());
- }
@Author: YouSiki
BZOJ 2424: [HAOI2010]订货的更多相关文章
- BZOJ 2424: [HAOI2010]订货 费用流
2424: [HAOI2010]订货 Description 某公司估计市场在第i个月对某产品的需求量为Ui,已知在第i月该产品的订货单价为di,上个月月底未销完的单位产品要付存贮费用m,假定第一月月 ...
- BZOJ 2424: [HAOI2010]订货(最小费用最大流)
最小费用最大流..乱搞即可 ------------------------------------------------------------------------------ #includ ...
- BZOJ 2424: [HAOI2010]订货(费用流)
裸的费用流了= =从源点向每个点连费用为di,从汇点向每个点连流量为ui,每个点向下一个点连费用为m,流量为s的边就行了 CODE: #include<cstdio>#include< ...
- bzoj 2424: [HAOI2010]订货 (费用流)
直接费用流,天数就是点数 type arr=record toward,next,cap,cost:longint; end; const maxm=; maxn=; mm=<<; var ...
- 2424: [HAOI2010]订货
2424: [HAOI2010]订货 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 922 Solved: 642[Submit][Status][ ...
- 2424. [HAOI2010]订货【费用流】
Description 某公司估计市场在第i个月对某产品的需求量为Ui,已知在第i月该产品的订货单价为di,上个月月底未销完的单位产品要付存贮费用m,假定第一月月初的库存量为零,第n月月底的库存量也为 ...
- 【BZOJ2424】[HAOI2010]订货(费用流)
[BZOJ2424][HAOI2010]订货(费用流) 题面 BZOJ 洛谷 题解 傻逼费用流吧... 一开始理解错意思了,仓库大小为\(m\)的含义是留到下个月最多为\(m\),而不是任意时刻的容量 ...
- 【BZOJ2424】[HAOI2010]订货 最小费用流
[BZOJ2424][HAOI2010]订货 Description 某公司估计市场在第i个月对某产品的需求量为Ui,已知在第i月该产品的订货单价为di,上个月月底未销完的单位产品要付存贮费用m,假定 ...
- bzoj2424 [HAOI2010]订货 dp+单调性
[HAOI2010]订货 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 1311 Solved: 884[Submit][Status][Discu ...
随机推荐
- 通过JAXB完成Java对象与XML之间的转换
Java对象转换XML的过程叫marshal. XML转换到Java对象的过程叫unmarshal. 一.Java对象转化为XML 这里省略getter和setter方法 通过标注@XMLRootEl ...
- Atitit.eclise的ide特性-------abt 编译
Atitit.eclise的ide特性-------abt 编译 为什么要在Intellij IDEA中使用Eclipse编译器 如果你使用Intellij Idea,你应该考虑使用Eclipse编译 ...
- Css3新特性应用之形状
一.自适应椭圆 * border-radius特性: * 可以单独指定水平和垂直半径,并且值可以是百分比,用/(斜杠)分隔这两个值即可(可以实现自适应宽度椭圆). * 还可以单独指定四个角 ...
- 移动web开发调试工具AlloyLever介绍
简介 web调试有几个非常频繁的刚需:看log.看error.看AJAX发包与回包.其他的如timeline和cookie以及localstorage就不是那么频繁,但是AlloyLever都支持.如 ...
- 传统软件和SaaS,差异究竟在哪里
这篇文章从创业起步阶段.产品形态和产品策略.市场竞争格局三个方面比较了中美 SaaS 领域的异同,在文章的最后,作者根据自己在 Box 的工作经历对在国内做 SaaS 的公司提出了四点建议. 我曾有幸 ...
- MBProgressHUD 显示后,为何不能点击屏幕其他地方
解决办法: hud.userInteractionEnabled= NO; 就是这么简单粗暴!这个问题 我一定要发到首页候选区! /********************************* ...
- [Erlang 0123] Erlang EPMD
epmd进程和Erlang节点进程如影随形,在Rabbitmq集群,Ejabberd集群,Couchbase集群产品文档中都会有相当多的内容讲epmd,epmd是什么呢? epmd 是Erlan ...
- apache下htaccess不起作用,linux,windows详解
可能出现下面这三种的错误可能性: 第一种:启用 rewrite 和 .htaccess 设置 rewrite设置:找到apache的配置文件httpd.conf文件,找到:#LoadModule re ...
- 创建docker私人仓库
关于创建docker私人仓库 1.1. 安装步骤 1.1.1. 直接从公共库上面下载register镜像在本地执行 1.1.1.1. ...
- 直播推流之blibli和拉流LFLiveKit
执行上面操作后,导入合成的拉流blibli包到工程中,然后新建个播放控制器来设置播放 1. 播放的一些操作. 2. 高斯模糊. 3. 新建聊天控制器. - (void)viewDidLoad { [ ...