仓库建设

luogu 2120

题目大意

有一个斜坡,上面有n个工厂(山顶是1,山脚是nnn,工厂都是漏填),上面有pip_ipi​个货物,和工厂1的距离为x1x_1x1​
现在有一场大雨,你可以在某些工厂处建立仓库(费用是cic_ici​),没有建立仓库的工厂要把货物运到更低的仓库(及编号越大的仓库),运费是货物数∗*∗距离
现在问你全部货物运到仓库中最少需要多少钱

输入样例

3
0 5 10
5 3 100
9 6 10

输出样例

32

样例说明

在工厂 1 和工厂 3 建立仓库,建立费用为 10+10=2010+10=2010+10=20 ,运输费用为 (9−5)×3=12(9-5) \times 3 = 12(9−5)×3=12,总费用 32。

数据范围

对于 20%20\%20% 的数据,保证 n≤500n \leq 500n≤500。
对于 40%40\%40% 的数据,保证 n≤104n \leq 10^4n≤104 。
对于 100%100\%100% 的数据,保证 1≤n≤1061 \leq n \leq 10^61≤n≤106 ,0≤xi,pi,ci<2310 \leq x_i,~p_i,~c_i < 2^{31}0≤xi​, pi​, ci​<231 。
对于任意的 1≤i<n1 \leq i < n1≤i<n,保证 xi<xi+1。x_i < x_{i + 1} 。xi​<xi+1​。
设答案为 ansansans,保证 ans+∑i=1npixi<263ans + \sum_{i = 1}^{n} p_ix_i < 2^{63}ans+∑i=1n​pi​xi​<263 。

解题思路

我们设fif_ifi​为在iii处建仓库,前iii个工厂的货物全部运到仓库的最小费用(这里把ppp改为sss,把xxx改为vvv)
我们就可以得出转移方程
fi=min⁡{fj+ci+∑k=j+1i−1(vi−vk)sk}=min⁡{fj+ci+∑k=j+1i(vi−vk)sk}=min⁡{fj+ci+∑k=j+1ivisk−∑k=j+1ivksk}=min⁡{fj+ci+(sumsi−sumsj)vi−(vsi−vsj)}\begin{aligned}f_i & = \min\{f_j+c_i+\sum_{k=j+1}^{i-1}(v_i-v_k)s_k\} \\ & = \min\{f_j+c_i+\sum_{k=j+1}^{i}(v_i-v_k)s_k\} \\ & =\min\{f_j+c_i+\sum_{k=j+1}^{i}v_is_k-\sum_{k=j+1}^{i}v_ks_k\} \\ & = \min\{f_j + c_i + (sums_i-sums_j)v_i - (vs_i - vs_j)\} \end{aligned}fi​​=min{fj​+ci​+k=j+1∑i−1​(vi​−vk​)sk​}=min{fj​+ci​+k=j+1∑i​(vi​−vk​)sk​}=min{fj​+ci​+k=j+1∑i​vi​sk​−k=j+1∑i​vk​sk​}=min{fj​+ci​+(sumsi​−sumsj​)vi​−(vsi​−vsj​)}​
注:
第二行加了iii这一项,但因为vi−vi=0v_i-v_i=0vi​−vi​=0所以结果不变
第四行vsi=∑j=1ivisivs_i=\sum_{j=1}^{i} v_is_ivsi​=∑j=1i​vi​si​
若现在有两个决策点a,ba,ba,b满足a>b,aa>b,aa>b,a优于bbb
则:
fa+ci+(sumsi−sumsa)vi−(vsi−vsa)<fb+ci+(sumsi−sumsb)vi−(vsi−vsb)f_a + c_i + (sums_i-sums_a)v_i - (vs_i - vs_a) < f_b + c_i + (sums_i-sums_b)v_i - (vs_i - vs_b)fa​+ci​+(sumsi​−sumsa​)vi​−(vsi​−vsa​)<fb​+ci​+(sumsi​−sumsb​)vi​−(vsi​−vsb​)
fa+ci+sumsivi−sumsavi−vsi+vsa<fb+ci+sumsivi−sumsbvi−vsi+vsbf_a + c_i + sums_iv_i-sums_av_i - vs_i + vs_a < f_b + c_i + sums_iv_i-sums_bv_i - vs_i + vs_bfa​+ci​+sumsi​vi​−sumsa​vi​−vsi​+vsa​<fb​+ci​+sumsi​vi​−sumsb​vi​−vsi​+vsb​
fa−sumsavi+vsa<fb−sumsbvi+vsbf_a-sums_av_i + vs_a < f_b-sums_bv_i + vs_bfa​−sumsa​vi​+vsa​<fb​−sumsb​vi​+vsb​
(fa+vsa)−(fb+vsb)<sumsavi−sumsbvi(f_a+vs_a)-(f_b+vs_b)< sums_av_i-sums_bv_i(fa​+vsa​)−(fb​+vsb​)<sumsa​vi​−sumsb​vi​
(fa+vsa)−(fb+vsb)<sumsavi−sumsbvi(f_a+vs_a)-(f_b+vs_b)< sums_av_i-sums_bv_i(fa​+vsa​)−(fb​+vsb​)<sumsa​vi​−sumsb​vi​
((fa+vsa)−(fb+vsb))/(sumsa−sumsb)<vi((f_a+vs_a)-(f_b+vs_b))/(sums_a-sums_b)<v_i((fa​+vsa​)−(fb​+vsb​))/(sumsa​−sumsb​)<vi​
我们设
yi=fi+vsay_i=f_i+vs_ayi​=fi​+vsa​
xi=sumsix_i=sums_ixi​=sumsi​

(ya−yb)/(xa−xb)<vi(y_a-y_b)/(x_a-x_b)<v_i(ya​−yb​)/(xa​−xb​)<vi​
然后按照斜率优化模板套即可

代码

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#define ll long long
using namespace std;
ll n, l, r, v[1000050], s[1000050], c[1000050], d[1000050], y[1000050], f[1000050], vs[1000050];
int main()
{scanf("%d", &n);for (int i = 1; i <= n; ++i){scanf("%d%d%d", &v[i], &s[i], &c[i]);vs[i] = vs[i - 1] + v[i] * s[i];s[i] += s[i - 1];//s没用,就直接弄成前缀和}for (int i = 1; i <= n; ++i){while(r > l && (y[d[l + 1]] - y[d[l]]) < v[i] * (s[d[l + 1]] - s[d[l]])) l++;//模板f[i] = f[d[l]] + c[i] + (s[i] - s[d[l]]) * v[i] - (vs[i] - vs[d[l]]);y[i] = f[i] + vs[i];while(r > l && (y[i] - y[d[r]])*(s[d[r]] - s[d[r-1]]) < (y[d[r]] - y[d[r-1]])*(s[i] - s[d[r]])) r--;d[++r] = i;}printf("%d", f[n]);return 0;
}

【斜率优化】仓库建设(luogu 2120)相关推荐

  1. [ZJOI2007]仓库建设(斜率优化)

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

  2. 【BZOJ1096】仓库建设,斜率优化DP练习

    传送门 写在前面:前来报道的学弟 思路:这是学习斜率优化后完全自己独立处理出的第一个题吧,感觉自己还是太弱,这么就初步理解斜率优化. 先推转移方程,这个还是比较好弄得 f[i]=c[i]+min(f[ ...

  3. luogu P5468 [NOI2019]回家路线 (斜率优化、DP)

    题目链接: (luogu) https://www.luogu.org/problemnew/show/P5468 题解: 爆long long毁一生 我太菜了,这题这么简单考场上居然没想到正解-- ...

  4. BZOJ 3203 Luogu P3299 [SDOI2013]保护出题人 (凸包、斜率优化、二分)

    惊了,我怎么这么菜啊.. 题目链接: (bzoj)https://www.lydsy.com/JudgeOnline/problem.php?id=3203 (luogu)https://www.lu ...

  5. 洛谷P2497:基站建设(splay、斜率优化)

    所谓splay斜率优化dp,就是利用splay和斜率对dp进行优化 (逃) 解析 在斜优的时候,有时我们会发现我们插入的点的横坐标并不单调 这个时候我们就无法利用单调队列维护凸包了 这时,我们就要请出 ...

  6. bzoj 1096: [ZJOI2007]仓库建设(斜率DP)

    1096: [ZJOI2007]仓库建设 Time Limit: 10 Sec  Memory Limit: 162 MB Submit: 5232  Solved: 2324 [Submit][St ...

  7. BZOJ 1096: [ZJOI2007]仓库建设

    传送门 斜率优化DP入门题 显然如果在一个位置 i 建一个仓库,且上一个仓库位置为 j 那么从 j+1到 i 的物品显然都要存在 i 仓库是最优的 设 $f [ i ]$ 表示在第 i 个工厂建设仓库 ...

  8. bzoj1096 [ZJOI2007]仓库建设

    [ZJOI2007]仓库建设 Time Limit: 10 Sec Memory Limit: 162 MB Description L公司有N个工厂,由高到底分布在一座山上.如图所示,工厂1在山顶, ...

  9. 提高篇 第五部分 动态规划 第6章 斜率优化动态规划

    例1 任务安排(TYVJ1098) [tyvj1098]任务安排(dp)_薇小薇-CSDN博客 Tyvj1098 任务安排_Monster__Yi的博客-CSDN博客 P2365 任务安排 任务安排 ...

最新文章

  1. 在Ubuntu 14.04 64bit上搭建Scala开发环境
  2. Scala变量的声明和赋值
  3. mysql sqlite 性能优化_MySQL和Sqlite3性能测试
  4. 2019年最值得关注的5个人工智能趋势!
  5. 大型网站采用的具有稳定性的系统构架
  6. 7-5 sdut-验证“哥德巴赫猜想” (10 分)(优化素数判断)
  7. An SSH installation couldn‘t be found
  8. “苹果正在走下神坛” | 畅言
  9. python第九天课程:遇到了金角大王
  10. 洛谷 P4344 [SHOI2015]脑洞治疗仪
  11. 程序员提升之排查bug的能力
  12. 知己知彼-关于Oracle安全比特币勒索问题揭秘和防范
  13. exfat linux 驱动_「正点原子Linux连载」第二章Ubuntu系统入门(2)
  14. 学制两年的计算机考研院校,研究生学制三年合适还是两年实用
  15. 计算机网络中使用的最多的交换技术是,计算机网络中主要使用的交换技术
  16. html炫彩粒子的代码,HTML5 Canvas炫彩粒子特效生成器
  17. Linux中awk后面的RS, ORS, FS, OFS 用法
  18. 艾拉物联:标准协议不同,碎片化将是IoT长期挑战
  19. VIO学习笔记(二)—— IMU 传感器
  20. 展示一下用thinker做小软件的UI

热门文章

  1. java中注解的解析_全面解析Java中的注解与注释
  2. # 保持最外层获取焦点_大事件!沈阳爱尔白内障焕晶诊疗中心正式启用,两位PanOptix三焦点人工晶体植入患者清晰见证!...
  3. python gui界面启动脚本、点击按钮执行脚本_如何使用PyQt在按钮单击上调用python脚本...
  4. git使用的基本流程_git命令的基本使用
  5. android loading封装_我们经常用的Loading动画居然还有这种姿势
  6. 7-11 租用游艇问题 (15 分)(思路+详解+一步步分析+网格解决动态规划问题)Come boy!!!!
  7. linux多行变一列,多行转为一列
  8. mysql下载了解压版怎么_教你安装Mysql(解压版/非安装包)图文教程
  9. [C++11]decltype在泛型编程中的使用举例
  10. 高等数学上-赵立军-北京大学出版社-题解-练习6.1