bzoj 1096 斜率优化DP
首先比较容易的看出来是DP,w[i]为前i个工厂的最小费用,那么w[i]=min(w[j-1]+cost(j,i))+c[i],但是这样是不work的,复杂度上明显过不去,这样我们考虑优化DP。
设A[i]=Σp[j](0<j<=i),B[i]=Σp[j]*x[j](0<j<=i),那么我们就可以表示cost(j,i)了。
cost(j,i)=Σ(x[i]-x[k])*p[k]
=Σx[i]*p[k]-Σx[k]*p[k]
=x[i]*(A[i]-A[j-1])-(B[i]-B[j-1])
=x[i]*A[i]-x[i]*A[j-1]-B[i]+B[j-1]
对于这个式子我们考虑斜率优化,假设j>k且决策j优于决策k。
那么有w[j-1]-x[i]*A[j-1]+B[j-1]<w[k-1]-x[i]*B[k-1]+B[k-1]
那么((w[j-1]+B[j-1])-(w[k-1]+B[k-1]))/(A[j-1]-B[k-1])<x[i]
这样就是标准的斜率优化了,维护一个上凸壳就行了。
/**************************************************************Problem: 1096User: BLADEVILLanguage: C++Result: AcceptedTime:2648 msMemory:55492 kb ****************************************************************///By BLADEVIL #include <cstdio> #define maxn 1000010 #define LL long longusing namespace std;int n; LL a[maxn],c[maxn],x[maxn],que[maxn]; LL A[maxn],B[maxn],w[maxn];double k(int k,int j) {double kk;kk=(((w[j-1]+B[j-1])-(w[k-1]+B[k-1]))/(A[j-1]-A[k-1]));return kk; }int main() {scanf("%d",&n);for (int i=1;i<=n;i++) scanf("%lld%lld%lld",&x[i],&a[i],&c[i]);for (int i=1;i<=n;i++) A[i]=A[i-1]+a[i],B[i]=B[i-1]+a[i]*x[i];int h=1,t=0;for (int i=1;i<=n;i++){ for (;(h<t)&&(k(que[t-1],i)<k(que[t-1],que[t]));t--);que[++t]=i;for (;(h<t)&&(k(que[h],que[h+1])<x[i]);h++);int cur=que[h];w[i]=w[cur-1]+x[i]*A[i]-x[i]*A[cur-1]-B[i]+B[cur-1]+c[i];//printf("%d %d\n",h,t); }printf("%lld\n",w[n]);return 0; }
转载于:https://www.cnblogs.com/BLADEVIL/p/3552093.html
bzoj 1096 斜率优化DP相关推荐
- bzoj 1597 [Usaco2008 Mar]土地购买——斜率优化dp
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1597 又一道斜率优化dp.负数让我混乱.不过仔细想想还是好的. 还可以方便地把那个负号放到x ...
- BZOJ 1010: [HNOI2008]玩具装箱toy 斜率优化dp
Description P教授要去看奥运,但是他舍不下他的玩具,于是他决定把所有的玩具运到北京.他使用自己的压缩器进行压缩,其可以将任意物品变成一堆,再放到一种特殊的一维容器中.P教授有编号为1... ...
- BZOJ 2149 拆迁队 斜率优化DP 主席树
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=2149 题目大意: 一个长度为 n n的序列aa,改变其中的某些数使之成为一个单调递增序列, ...
- bzoj 1597: [Usaco2008 Mar]土地购买(斜率优化dp 例题)
Description 农夫John准备扩大他的农场,他正在考虑N (1 <= N <= 50,000) 块长方形的土地. 每块土地的长宽满足(1 <= 宽 <= 1,000, ...
- NOI2007 货币兑换 - CDQ分治斜率优化dp
斜率优化dp维护一个凸壳.如果\(x, y\)坐标都递增,可以用单调队列,如果只有\(x\)递增,可以在凸壳上二分斜率,如果\(x, y\)都不递增,则需要在凸包中插入,可以用平衡树或cdq分治维护. ...
- CF-311B Cats Transport(斜率优化DP)
题目链接 题目描述 小S是农场主,他养了 \(M\)只猫,雇了 \(P\) 位饲养员. 农场中有一条笔直的路,路边有 \(N\) 座山,从 \(1\) 到 \(N\)编号. 第 \(i\) 座山与第 ...
- 【洛谷3648】[APIO2014] 序列分割(斜率优化DP)
点此看题面 大致题意: 你可以对一个序列进行\(k\)次分割,每次得分为两个块元素和的乘积,求总得分的最大值. 区间\(DPor\)斜率优化\(DP\) 这题目第一眼看上去感觉很明显是区间\(DP\) ...
- HDU-3507Print Article 斜率优化DP
学习:https://blog.csdn.net/bill_yang_2016/article/details/54667902 HDU-3507 题意:有若干个单词,每个单词有一个费用,连续的单词组 ...
- APIO2010 特别行动队 斜率优化DP算法笔记
做完此题之后 自己应该算是真正理解了斜率优化DP 根据状态转移方程$f[i]=max(f[j]+ax^2+bx+c),x=sum[i]-sum[j]$ 可以变形为 $f[i]=max((a*sum[j ...
最新文章
- docker删除es数据_docker问题:quot;rpc error: code = 2 desc = containerd: container ...quot;
- 《JavaScript权威指南第六版》学习笔记-JavaScript概述
- PHP常用功能块_错误和异常处理 — php(32)
- 学好Python能做什么?有哪些从业方向?
- 离散数学群论_离散数学中的群论及其类型
- 以post方式携窗体等参数向服务器发送请求 发出去的字节流 返回的内容
- 合天网安就业班_CTF挑战赛-合天网安实验室
- Mac电脑上的Safari运行缓慢,卡的要死,该怎么解决?
- 专题四——线段树、树状数组
- Social Media附加价值开发的四大模式
- 用极域课堂管理系统软件批量格式化D盘
- Android 配置https抓包
- 做项目管理需要哪些技能呢?
- 正弦交流电有效值系数sqrt(2)的推导
- PIE-Engine教程—中国降水分布可视化加载以2018年为例(含图例添加)
- idea激活到2100年
- python画图旋转图形_python – 如何将matplotlib图旋转90度?
- 高级计划排程APS系统的十二个应用方法
- 《十周成为数据分析师》笔记——业务线 第六节 以数据分析为导向的运营体系搭建
- STM32智能门锁之调试步进电机
热门文章
- jquery学习之1.10-小练习-选中下拉框内容并显示
- Posix线程编程指南(4) 线程终止
- HTTP代理实现请求报文的拦截与篡改2--功能介绍+源码下载
- JWT认证原理、整合springboot实战应用
- Fabric学习笔记(一)- Centos 7下的Fabric 2.3.2环境搭建
- Yammer Metrics实现服务指标收集与监控
- Hive参数性能调优
- linux网卡顺序问题,linux网卡绑定及网卡顺序变更测试.docx
- spring基础——普通bean xml注入
- JVM垃圾回收,面试问到的都有了