f[i]=min(f[j]+w[j,i])+c[i];  j∈[0,i-1]

w[j,i]=p[j+1]*(x[i]-x[j+1])+...+p[i]*(x[i]-x[i]);

最裸的DP是n^2的,显然会超时

现在化简一下w[j,i]

w[j,i]=x[i]*(p[j+1]+...+p[i])-(x[j+1]*p[j+1]+...+x[i]*p[i]);

设sum[i]=sigma(p[j]*x[j]);  sump[i]=sigma(p[j]);   j∈[1,i]

那么 w[j,i]=-x[i]*(sump[i]-sump[j])-(sum[i]-sum[j])

       =-x[i]*sump[j]+sum[j]+x[i]*sump[i]-sum[i];

即 f[i]=min(-x[i]*sump[j]+sum[j]+f[j])+x[i]*sum[i]-sum[i];   j∈[0,i-1]

注意到sump[j] 和 sum[j]+f[j] 是单调递增的,可以证明决策是单调向右的。

维护一个下凸包即可。

附 DP斜率优化参考教程

①:http://wenku.baidu.com/link?url=9JNX3KG-XtAljlg1JDOIvSN_t_UntKNFdi-mDgWOh-oUEIbFQDOStyKRKXxUILxZ1CQXBJNoPzKf23IHmLtNT65peiiBoxl9vDM-G6MPsJy

②:http://www.cnblogs.com/ka200812/archive/2012/08/03/2621345.html

 const maxn=;
var q,f,x,p,c,sum,sump:array[..maxn] of int64;
i,h,t,n:longint;
function kx(i,j:longint):int64;
begin
exit(sump[i]-sump[j]);
end;
function ky(i,j:longint):int64;
begin
exit(f[i]+sum[i]-f[j]-sum[j]);
end;
begin
readln(n);
for i:= to n do readln(x[i],p[i],c[i]);
for i:= to n do sump[i]:=sump[i-]+p[i];
for i:= to n do sum[i]:=sum[i-]+p[i]*x[i];
q[]:=; h:=; t:=;
for i:= to n do
begin
while (h<t) and (x[i]*kx(q[h+],q[h])>ky(q[h+],q[h])) do inc(h);
f[i]:=-x[i]*sump[q[h]]+f[q[h]]+sum[q[h]]+x[i]*sump[i]-sum[i]+c[i];
while (h<t) and ( ky(i,q[t])*kx(q[t],q[t-])<=ky(q[t],q[t-])*kx(i,q[t])) do dec(t);
inc(t);
q[t]:=i;
end;
writeln(f[n]);
end.

ZJOI 仓库建设 (斜率DP)的更多相关文章

  1. bzoj-1096 1096: [ZJOI2007]仓库建设(斜率优化dp)

    题目链接: 1096: [ZJOI2007]仓库建设 Description L公司有N个工厂,由高到底分布在一座山上.如图所示,工厂1在山顶,工厂N在山脚.由于这座山处于高原内陆地区(干燥少雨),L ...

  2. BZOJ 1096: [ZJOI2007]仓库建设 [斜率优化DP]

    1096: [ZJOI2007]仓库建设 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 4201  Solved: 1851[Submit][Stat ...

  3. 【BZOJ-1096】仓库建设 斜率优化DP

    1096: [ZJOI2007]仓库建设 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 3719  Solved: 1633[Submit][Stat ...

  4. bzoj1096[ZJOI2007]仓库建设 斜率优化dp

    1096: [ZJOI2007]仓库建设 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 5482  Solved: 2448[Submit][Stat ...

  5. 【BZOJ】1096: [ZJOI2007]仓库建设(dp+斜率优化)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1096 首先得到dp方程(我竟然自己都每推出了QAQ)$$d[i]=min\{d[j]+cost(j+ ...

  6. 【bzoj1096】[ZJOI2007]仓库建设 斜率优化dp

    题目描述 L公司有N个工厂,由高到底分布在一座山上.如图所示,工厂1在山顶,工厂N在山脚.由于这座山处于高原内陆地区(干燥少雨),L公司一般把产品直接堆放在露天,以节省费用.突然有一天,L公司的总裁L ...

  7. BZOJ 1096: [ZJOI2007]仓库建设(DP+斜率优化)

    [ZJOI2007]仓库建设 Description L公司有N个工厂,由高到底分布在一座山上.如图所示,工厂1在山顶,工厂N在山脚.由于这座山处于高原内陆地区(干燥少雨),L公司一般把产品直接堆放在 ...

  8. P2120 [ZJOI2007]仓库建设 斜率优化dp

    好题,这题是我理解的第一道斜率优化dp,自然要写一发题解.首先我们要写出普通的表达式,然后先用前缀和优化.然后呢?我们观察发现,x[i]是递增,而我们发现的斜率也是需要是递增的,然后就维护一个单调递增 ...

  9. bzoj 1096: [ZJOI2007]仓库建设 斜率優化

    1096: [ZJOI2007]仓库建设 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 2242  Solved: 925[Submit][Statu ...

  10. bzoj 1096 仓库建设 -斜率优化

    L公司有N个工厂,由高到底分布在一座山上.如图所示,工厂1在山顶,工厂N在山脚.由于这座山处于高原内陆地区(干燥少雨),L公司一般把产品直接堆放在露天,以节省费用.突然有一天,L公司的总裁L先生接到气 ...

随机推荐

  1. Java 中equals和toString()方法重写

    1,equals方法 (1)什么时候需要重写? 如果希望不同内存但相同内容的两个对象equals时返回true,则需要重写equals (2)怎么重写? class A { public int i; ...

  2. settimeout如何调用方法的时候,传递参数

    常见写法: setTimeout("loaded()", 200); 延迟加载loaded方法 如果要给loaded方法传递参数 setTimeout(function () { ...

  3. c# xml的增删改查操作 xmlDocument 的用法

    1.将xml转换为DataTable string path = "";//xml的位置StringReader sr = null;XmlTextReader xmlReader ...

  4. jupyter

    Pip install jupyter To run:  jupyter notebook 基本操作 执行当前cell,并自动跳到下一个cell:Shift      Enter 执行当前cell,执 ...

  5. Jquery 表格操作,记录分页情况下,每一页中被用户勾选的信息

    如下图,一个分页列表,用户可以随意勾选一条或多条信息,然后进行某种操作,如“提交”.但是有个问题:如果勾选了一条信息之后,点[下一页],那么上一页 勾选的条目被刷新掉了. 问题:如果用户需要在第1页, ...

  6. Maven 系列 一 :Maven 快速入门及简单使用【转】

    开发环境 MyEclipse 2014 JDK 1.8 Maven 3.2.1 1.什么是Maven? Maven是一个项目管理工具,主要用于项目构建,依赖管理,项目信息管理. 2.下载及安装 下载最 ...

  7. DB2存储过程语法规则

    如何声明一个存储过程CREATE PROCEDURE 存储过程名(IN 输入变量名 输入变量类型,OUT 输出变量名 输出变量类型)紧跟其后的是存储过程属性列表            常用的有:LAN ...

  8. Can't connect to local MySQL server through socket 问题解决

    Fedora8启动mysql 报错:ERROR 2002 (HY000): Can’t connect to local MySQL server through socket ‘/var/lib/m ...

  9. linux 下echo命令写入文件内容

    http://blog.csdn.net/xukai871105/article/details/35834703 echo "Raspberry" > test.txt

  10. mysqldump使用语法

    复制代码 代码如下: mysqldump -u user -p db tab1 tab2 > db.sql   恢复 复制代码 代码如下: mysql -u user -p db < db ...