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 ...
随机推荐
- HTML5学习总结——canvas绘制象棋(canvas绘图)
一.HTML5学习总结——canvas绘制象棋 1.第一次:canvas绘制象棋(笨方法)示例代码: <!DOCTYPE html> <html> <head> & ...
- vue.js初级入门之最基础的双向绑定操作
首先在页面引入vue.js以及其他需要用到的或者可能要用到的插件(这里我多引用了bootstrap和jquery) 引用的时候需要注意文件的路径,准备工作这样基本就完成了,下面正式开始入门. vue. ...
- 【代码笔记】iOS-字符串的分割
一,代码. - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view. ...
- A星寻路算法介绍
你是否在做一款游戏的时候想创造一些怪兽或者游戏主角,让它们移动到特定的位置,避开墙壁和障碍物呢? 如果是的话,请看这篇教程,我们会展示如何使用A星寻路算法来实现它! 在网上已经有很多篇关于A星寻路算法 ...
- java中使用mongodb的几种方式
最近有时间看了一下mongodb,因为mongodb更容易扩展所以考虑使用mongodb来保存数据. 首先下载安装mongodb,这是很简单的,装好后使用mongod命令就可以启动数据库.正式部署的话 ...
- freeradius整合AD域作anyconncet认证服务器
一.服务器要求 Radius服务器:centos6.6.hostname.selinux disabled.stop iptables AD域服务器:Windows Server 2008 R2 E ...
- kubernetes部署Fluentd+Elasticsearch+kibana 日志收集系统
一.介绍 1. Fluentd 是一个开源收集事件和日志系统,用与各node节点日志数据的收集.处理等等.详细介绍移步-->官方地址:http://fluentd.org/ 2. Elastic ...
- Ubuntu管理开机启动服务项 -- 图形界面的Boot-up Manager
有时学习时安装的服务太多,比如mysql.mongodb.redis.apache.nginx等等,它们都是默认开机启动的,如果不想让它们开机启动,用到时再自己手工启动怎么办呢? 使用sysv-rc- ...
- Leetcode: Convert sorted list to binary search tree (No. 109)
Sept. 22, 2015 学一道算法题, 经常回顾一下. 第二次重温, 决定增加一些图片, 帮助自己记忆. 在网上找他人的资料, 不如自己动手. 把从底向上树的算法搞通俗一些. 先做一个例子: 9 ...
- 开坑Java编写Json解析器,简明教程
https://zhuanlan.zhihu.com/p/22460835?refer=json-tutorial 课程不是我原创,我打算照他的这个C版本来重写一遍Java的,打算用面向对象的方式来编 ...