笔记-[ZJOI2007]仓库建设

[ZJOI2007]仓库建设


\(f_i\) 到第 \(i\) 个工厂并且建设了仓库。

\[\begin{split}
f_i=&\min\{f_j+\sum_{h=j+1}^ip_h(x_i-x_h)\}+c_i\\
=&\min\{f_j+\sum_{h=j+1}^i\left(p_hx_i-p_hx_h\right)\}+c_i\\
\end{split}
\]

设 \(s_i=\sum_{h=1}^i p_h\),\(S_i=\sum_{h=1}^i p_hx_h\)。

\[\begin{split}
f_i=&\min\{f_j+\sum_{h=j+1}^i\left(p_hx_i-p_hx_h\right)\}+c_i\\
=&\min\{f_j+x_i(s_i-s_j)-(S_i-S_j)\}+c_i\\
=&\min\{f_j-x_is_j+S_j\}+x_is_i-S_i+c_i\\
\end{split}
\]

考虑 \(j=k\) 比 \(j=t\) 更优:

\[\begin{split}
f_k-x_is_k+S_k<& f_t-x_is_t+S_t\\
(f_k+S_k)-(f_t+S_t)<& x_is_k-x_is_t\\
\frac{(f_k+S_k)-(f_t+S_t)}{s_k-s_t}<& x_i\\
\end{split}
\]

搞定。


Code

#include <bits/stdc++.h>
using namespace std; //Start
#define re register
#define il inline
#define mk make_pair
#define pb push_back
#define db double
#define lng long long
#define fi first
#define se second
const int inf=0x3f3f3f3f;
const lng INF=0x3f3f3f3f3f3f3f3f; //Data
int n;
vector<int> x,p,c;
vector<lng> s,S,f; //DP
il db slope(re int k,re int t){
return 1.0*((f[k]+S[k])-(f[t]+S[t]))/(s[k]-s[t]);
}
il int DP(){
re int l=1,r=0; re vector<int> q(n+7); q[++r]=0;
for(re int i=1;i<=n;i++){
while(l<r&&slope(q[l],q[l+1])<=x[i]) l++;
f[i]=f[q[l]]-(lng)x[i]*s[q[l]]+S[q[l]]+(lng)x[i]*s[i]-S[i]+c[i];
while(l<r&&slope(q[r-1],q[r])>=slope(q[r],i)) r--;
q[++r]=i;
}
return f[n];
} //Main
int main(){
scanf("%d",&n);
x=p=c=vector<int>(n+7);
s=S=f=vector<lng>(n+7);
for(re int i=1;i<=n;i++){
scanf("%d%d%d",&x[i],&p[i],&c[i]);
s[i]=s[i-1]+p[i],S[i]=S[i-1]+(lng)p[i]*x[i];
}
printf("%lld\n",DP());
return 0;
}

\[\Huge\color{#ddd}{\texttt{---END---}}
\]

笔记-[ZJOI2007]仓库建设的更多相关文章

  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】 [ZJOI2007]仓库建设 (斜率优化)

    1096: [ZJOI2007]仓库建设 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 3940  Solved: 1736 Description ...

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

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

  5. bzoj 1096 [ZJOI2007]仓库建设(关于斜率优化问题的总结)

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

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

    dp(v) = min(dp(p)+cost(p,v))+C(v) 设sum(v) = ∑pi(1≤i≤v), cnt(v) = ∑pi*xi(1≤i≤v), 则cost(p,v) = x(v)*(s ...

  7. 边坡优化主题5——bzoj 1096 [ZJOI2007]仓库建设 解决问题的方法

    [原标题] 1096: [ZJOI2007]仓库建设 Time Limit: 10 Sec  Memory Limit: 162 MB Submit: 1998  Solved: 816 [id=10 ...

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

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

  9. 斜率优化入门学习+总结 Apio2011特别行动队&Apio2014序列分割&HZOI2008玩具装箱&ZJOI2007仓库建设&小P的牧场&防御准备&Sdoi2016征途

    斜率优化: 额...这是篇7个题的题解... 首先说说斜率优化是个啥,额... f[i]=min(f[j]+xxxx(i,j)) ;   1<=j<i (O(n^2)暴力)这样一个式子,首 ...

随机推荐

  1. 用GitHub Pages搭建博客(六)

    本篇介绍GitHub Pages网站加速 在上一篇提到如何对GitHub Pages配置自定义域名.其实,不论GitHub Pages的默认域名还是自定义域名,都使用了GitHub的CDN进行加速,虽 ...

  2. 蒲公英 · JELLY技术周刊 Vol.30: 此路不通?Vue 3 新提案 Ref-sugar

    蒲公英 · JELLY技术周刊 Vol.30 随着 Vue 3 发布,相关的新闻也逐渐火热起来,而近期 RFC 中两个新的提案也因为某乎上的一些事情变得广为人关注.Ref sugar和script s ...

  3. C/C++宏替换详解

    目录 1. 基本形式 2. 宏展开中的陷阱 3. #undef 4. 宏参数.# 和 ## 1. 基本形式 #define name replacement_text 通常情况下,#define 指令 ...

  4. Bad magic number ImportError in python

    是源码编译里面版本不对,删除掉源码pyc然后重新编译就可以了 find .-name '*.pyc'-delete python -m compileall . 更新历史 why when 创建 20 ...

  5. Python_字符串_方法

    #字典#把字符串中的字母提取出来改为大写并计数 a="aAsmr3idd4bgs7Dlsf9eAF" b1=[x for x in a if x.isalpha()] b=''.j ...

  6. HDU100题简要题解(2020~2029)

    HDU2020 绝对值排序 题目链接 Problem Description 输入n(n<=100)个整数,按照绝对值从大到小排序后输出.题目保证对于每一个测试实例,所有的数的绝对值都不相等. ...

  7. [原题复现]2019上海大学生WEB-Decade(无参数RCE、Fuzz)

    简介  原题复现:  考察知识点:无参数命令执行.Fuzz  线上平台:https://buuoj.cn(北京联合大学公开的CTF平台) 榆林学院内可使用信安协会内部的CTF训练平台找到此题 环境复现 ...

  8. C语言讲义——内联函数

    如果一些函数被频繁调用,不断地有函数入栈(Stack),会造成栈空间的大量消耗. 对应这种问题,可以使用内联函数(inline). 编译器会将内联函数的代码整段插入到调用的位置. #include & ...

  9. Jmeter(三十) - 从入门到精通 - Jmeter Http协议录制脚本工具-Badboy3(详解教程)

    1.简介 Badboy为方便自动化数据灵活性,以及脚本的重用,减少工作量:为此提供了脚本参数化的功能,这一篇文章宏哥以度娘搜索的关键字"北京-宏哥"进行参数化为例,宏哥带领你们实战 ...

  10. DevOps Workshop | 代码管理入门:基于代码扫描实现团队效率提升

    CODING「DevOps Workshop 学习营地」持续火热进行中! 在这里,你可以轻松实践 DevOps 全流程.体验高效的云端开发.赢取精美礼品--第二期大奖「戴尔 U2718Q 显示器」将于 ...