2018.09.07 bzoj1096: [ZJOI2007]仓库建设(斜率优化dp)
传送门
斜率优化dp经典题。
令f[i]表示i这个地方修建仓库的最优值,那么答案就是f[n]。
用dis[i]表示i到1的距离,sump[i]表示1~i所有工厂的p之和,sum[i]表示1~i所有工厂的p*dis之和。
那么有状态转移方程:
f[i]=min(f[j]+dis[i]∗(sump[i−1]−sump[j])−(sum[i]−sum[j])+c[i])" role="presentation" style="position: relative;">f[i]=min(f[j]+dis[i]∗(sump[i−1]−sump[j])−(sum[i]−sum[j])+c[i])f[i]=min(f[j]+dis[i]∗(sump[i−1]−sump[j])−(sum[i]−sum[j])+c[i])
于是选两个决策k1,k2并假设k1比k2优。
令t[k]=f[k]+sum[k]" role="presentation" style="position: relative;">t[k]=f[k]+sum[k]t[k]=f[k]+sum[k]
=>(t[k1]−t[k2])/(sump[k1]−sump[k2])>dis[i]" role="presentation" style="position: relative;">(t[k1]−t[k2])/(sump[k1]−sump[k2])>dis[i](t[k1]−t[k2])/(sump[k1]−sump[k2])>dis[i]
于是维护一个下凸壳就行了。
代码:
#include<bits/stdc++.h>
#define ll long long
#define N 1000005
using namespace std;
inline ll read(){
ll ans=0,w=1;
char ch=getchar();
while(!isdigit(ch)){if(ch=='-')w=-1;ch=getchar();}
while(isdigit(ch))ans=(ans<<3)+(ans<<1)+(ch^48),ch=getchar();
return ans*w;
}
int n,q[N],hd,tl;
ll sum[N],sump[N],f[N],dis[N],c[N];
inline double slope(int i,int j){return 1.0*(f[i]+sum[i]-f[j]-sum[j])/(sump[i]-sump[j]);}
int main(){
n=read(),hd=tl=1,q[1]=0;
for(int i=1;i<=n;++i)dis[i]=read(),sump[i]=sump[i-1]+read(),sum[i]=sum[i-1]+dis[i]*(sump[i]-sump[i-1]),c[i]=read();
for(int i=1;i<=n;++i){
while(hd<tl&&slope(q[hd+1],q[hd])<1.0*dis[i])++hd;
int j=q[hd];
f[i]=f[j]+dis[i]*(sump[i-1]-sump[j])-(sum[i-1]-sum[j])+c[i];
while(hd<tl&&slope(q[tl],q[tl-1])>slope(i,q[tl]))--tl;
q[++tl]=i;
}
cout<<f[n];
return 0;
}
2018.09.07 bzoj1096: [ZJOI2007]仓库建设(斜率优化dp)的更多相关文章
- bzoj1096[ZJOI2007]仓库建设 斜率优化dp
1096: [ZJOI2007]仓库建设 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 5482 Solved: 2448[Submit][Stat ...
- bzoj-1096 1096: [ZJOI2007]仓库建设(斜率优化dp)
题目链接: 1096: [ZJOI2007]仓库建设 Description L公司有N个工厂,由高到底分布在一座山上.如图所示,工厂1在山顶,工厂N在山脚.由于这座山处于高原内陆地区(干燥少雨),L ...
- 【bzoj1096】[ZJOI2007]仓库建设 斜率优化dp
题目描述 L公司有N个工厂,由高到底分布在一座山上.如图所示,工厂1在山顶,工厂N在山脚.由于这座山处于高原内陆地区(干燥少雨),L公司一般把产品直接堆放在露天,以节省费用.突然有一天,L公司的总裁L ...
- BZOJ 1096: [ZJOI2007]仓库建设 [斜率优化DP]
1096: [ZJOI2007]仓库建设 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 4201 Solved: 1851[Submit][Stat ...
- 【BZOJ-1096】仓库建设 斜率优化DP
1096: [ZJOI2007]仓库建设 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 3719 Solved: 1633[Submit][Stat ...
- P2120 [ZJOI2007]仓库建设 斜率优化dp
好题,这题是我理解的第一道斜率优化dp,自然要写一发题解.首先我们要写出普通的表达式,然后先用前缀和优化.然后呢?我们观察发现,x[i]是递增,而我们发现的斜率也是需要是递增的,然后就维护一个单调递增 ...
- 洛谷P2120 [ZJOI2007]仓库建设 斜率优化DP
做的第一道斜率优化\(DP\)QwQ 原题链接1/原题链接2 首先考虑\(O(n^2)\)的做法:设\(f[i]\)表示在\(i\)处建仓库的最小费用,则有转移方程: \(f[i]=min\{f[j] ...
- 2018.09.07 codeforces311B. Cats Transport(斜率优化dp)
传送门 斜率优化dp好题. 对于第i只猫,显然如果管理员想从出发开始刚好接到它,需要在t[i]=h[i]−dist(1,i)" role="presentation" s ...
- [ZJOI2007] 仓库建设 - 斜率优化dp
大脑真是个很优秀的器官,做事情之前总会想着这太难,真的逼着自己做下去,回头看看,其实也不过如此 很朴素的斜率优化dp了 首先要读懂题目(我的理解能力好BUG啊) 然后设\(dp[i]\)表示处理完前\ ...
随机推荐
- nodejs 获取文件夹中所有文件、图片 名
//获取项目工程里的图片 var fs = require('fs');//引用文件系统模块 var image = require("imageinfo"); //引用image ...
- Spring Data Jpa --- 入门
一.概述 Spring Data是Spring下的一个子项目,用于简化数据库访问,并支持云服务的开源框架.Spring Data支持NoSQL和 关系数据存储,其主要目标是使得数据库的访问变得方便快捷 ...
- 解决Linux命令行为什么变成-bash-3.2$
在Linux服务器上创建了一个新用户probe,是这样创建的: [root@localhost home]# groupadd -g 501 probe [root@localhost home]# ...
- TortoiseGit 使用 HTTP 方式每次 PUSH 无需输入密码的方法
由于 BitBucket 被墙,导致使用时只能用HTTPS代理的方式,但TortoiseGit貌似没有记忆密码的功能,以至于每次push时都要求输入密码,很是麻烦!在网上搜到的保存密码的方式也有点笨. ...
- Mac和iOS开发资源汇总—更新于2013-10-14
小引本文主要汇集一些苹果开发的资源,会经常更新,建议大家把这篇文章单独收藏(在浏览器中按command+D).今天(2013年10月14日)收录了answer哥(黄爱武)的博客,欢迎大家围观! 今天( ...
- 从给定字符串中截取n个字节的字符(解决汉字截取乱码问题)
function GetNBytesChar(s: Ansistring; n: Integer): string;var aStr: AnsiString; bStr: WideString;b ...
- redmine邮件配置
网上找了半天,有很多答案,最后自己测试找出一个解决办法. 1.找到安装位置 D:\Bitnami\redmine-2.5.2-2\apps\redmine\htdocs\config下的文件confi ...
- 疯狂JAVA——第七章 java基础类库
System类代表当前java程序的运行平台,程序不能创建System类的对象,System类提供了一些类变量和类方法,允许直接通过System类来调用这些类变量和类方法.
- ssh 设置反向代理
远程主机上/etc/ssh/sshd_config中,开启 GatewayPorts yes systemctl reload sshd 本地: ssh -CqTnN -R 0.0.0.0:9000: ...
- Containerpilot 配置文件模板
{ "consul": "{{ .CONSUL }}:8500", "logging": { "level": &quo ...