bzoj2424 [HAOI2010]订货 dp+单调性
[HAOI2010]订货
Time Limit: 10 Sec  Memory Limit: 128 MB
Submit: 1311  Solved: 884
[Submit][Status][Discuss]
Description
Input
Output
只有1行,一个整数,代表最低成本
Sample Input
2 4 8
1 2 4
Sample Output
HINT
先写了个DP方程:f[i][j]=min(f[i][j],f[i-1][k]+d[i]*(j+u[i]-k)+m*k);(0<=j<=s,0<=k<=j+u[i])
O(n*s^2),T的结果很明显
优化一下,很容易发现其实f数组是具有一定的单调性的
那么用单调队列来优化一下下
当f[i-1][list[head]]+d[i]*(j+u[i]-list[head])+m*list[head]>f[i-1][list[head+1]]+d[i]*(j+u[i]-list[head+1])+m*list[head+1]的时候说明list[head+1]对于当前情况更优,所以head++,不过要判断一下list[head+1]是否<=j+u[i]
其实f[i-1][list[head]]+d[i]*(j+u[i]-list[head])+m*list[head]>f[i-1][list[head+1]]+d[i]*(j+u[i]-list[head+1])+m*list[head+1]
可以转化为f[i-1][list[head]]-(d[i]-m)*list[head]>f[i-1][list[head+1]]-(d[i]-m)*list[head+1],将其中不变的值去掉
#include<cstring>
#include<cmath>
#include<iostream>
#include<algorithm>
#include<cstdio> #define N 57
#define M 10007
using namespace std;
inline int read()
{
int x=,f=;char ch=getchar();
while(!isdigit(ch)){if(ch=='-')f=-;ch=getchar();}
while(isdigit(ch)){x=(x<<)+(x<<)+ch-'';ch=getchar();}
return x*f;
} int n,m,s;
int u[],d[];
int f[][];
int list[]; int main()
{
n=read(),m=read(),s=read();
for(int i=;i<=n;i++) u[i]=read();
for(int i=;i<=n;i++) d[i]=read();
memset(f,,sizeof(f));
f[][]=;
for(int i=;i<=n;i++)
{
int head=,tail=s+;
for(int j=;j<=s;j++) list[j+]=j;
for(int j=;j<=s;j++)
{
while(head<=tail&&f[i-][list[head]]-(d[i]-m)*list[head]>f[i-][list[head+]]-(d[i]-m)*list[head+]&&list[head+]<=j+u[i]) head++;
int k=list[head];
f[i][j]=f[i-][k]+d[i]*(j+u[i]-k)+m*k;
}
}
printf("%d\n",f[n][]);
}
bzoj2424 [HAOI2010]订货 dp+单调性的更多相关文章
- bzoj2424 [HAOI2010]订货
		模拟一下仓库里面存储物品的价格情况即可,如果当前物品大于仓库里面物品那么就替换一下仓库里的物品,然后订货直接从仓库里先取,仓库里不够则直接购买,每次做完后记得买当前物品填补一下仓库直至仓库填满,当然这 ... 
- BZOJ-2424: [HAOI2010]订货【费用流】
		Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 1487 Solved: 1002[Submit][Status][Discuss] Descript ... 
- BZOJ2424 [HAOI2010]订货 - 费用流
		题解 (非常裸的费用流 题意有一点表明不清: 该月卖出的商品可以不用算进仓库里面. 然后套上费用流模板 代码 #include<cstring> #include<queue> ... 
- 【BZOJ2424】[HAOI2010]订货(费用流)
		[BZOJ2424][HAOI2010]订货(费用流) 题面 BZOJ 洛谷 题解 傻逼费用流吧... 一开始理解错意思了,仓库大小为\(m\)的含义是留到下个月最多为\(m\),而不是任意时刻的容量 ... 
- 【BZOJ2424】[HAOI2010]订货 最小费用流
		[BZOJ2424][HAOI2010]订货 Description 某公司估计市场在第i个月对某产品的需求量为Ui,已知在第i月该产品的订货单价为di,上个月月底未销完的单位产品要付存贮费用m,假定 ... 
- P2517 [HAOI2010]订货(dp)
		P2517 [HAOI2010]订货 设$f[i][j]$表示第$i$个月,库存为$j$的最小代价 枚举上个月的库存$k$,那么$f[i][j]=f[i-1][k]+(j+U[i]-k)*D[i]+j ... 
- BZOJ 2424: [HAOI2010]订货
		2424: [HAOI2010]订货 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 915 Solved: 639[Submit][Status][ ... 
- 2424: [HAOI2010]订货
		2424: [HAOI2010]订货 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 922 Solved: 642[Submit][Status][ ... 
- BZOJ 2424: [HAOI2010]订货 费用流
		2424: [HAOI2010]订货 Description 某公司估计市场在第i个月对某产品的需求量为Ui,已知在第i月该产品的订货单价为di,上个月月底未销完的单位产品要付存贮费用m,假定第一月月 ... 
随机推荐
- 分享一个工作中遇得到的sql(按每天每人统计拖车次数与小修次数)
			查询每人每天的数据 首先先建表 CREATE TABLE `user` ( `name` ) DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8; CR ... 
- Linux下中文乱码问题
			记录一下配置centos的时候遇到的一些常见问题 写了一个python脚本,有中文注释,而且会输出一些用户名称,其中包含中文字符.显示的时候出现乱码. 解决方案: 参见博客: Linux基础:中文显示 ... 
- 【问题记录】Linux Python等交互式输入回退键出现 ^H^H
			执行:yum install readline readline-devel 
- 第五篇Python基本数据类型
			运算符 1. 结果是具体的值:算数运算符和赋值运算符 算数运算符:+.-.*./.**(幂).%(取余).//(取商) print(3-2) # 减法 print(3*2) # 乘法 print(3/ ... 
- jmeter如何连接数据库
			大家都知道jmeter是java编写的,java/jmeter如果想连接数据库就要通过java database connector(JDBC)去连接,首先需先下载一个驱动 (mysql-connec ... 
- 教你如何用Docker快速搭建深度学习环境
			本教程搭建集 Tensorflow.Keras.Coffe.PyTorch 等深度学习框架于一身的环境,及jupyter. 本教程使用nvidia-docker启动实例,通过本教程可以从一个全新的Ub ... 
- 多线程&&I/O
			不是操作系统的,是UNIX环境高级编程的! 
- 有向图的强连通分量——kosaraju算法
			一.前人种树 博客:Kosaraju算法解析: 求解图的强连通分量 
- lintcode-117-跳跃游戏 II
			117-跳跃游戏 II 给出一个非负整数数组,你最初定位在数组的第一个位置. 数组中的每个元素代表你在那个位置可以跳跃的最大长度. 你的目标是使用最少的跳跃次数到达数组的最后一个位置. 样例 给出数组 ... 
- POJ3984(迷宫问题)
			定义一个二维数组: int maze[5][5] = { 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, ... 
