ZJOI2007仓库建设

讲一个比较呆一点的做法:

设f[i][1]表示后i个点且i点建仓库的最优解,f[i][0]表示后i个点且i点不建仓库的最优解。

那么显然可以从后往前DP:

f[i][0]=mini<j<=n{f[j][1]+∑i<=k<j(X[j]-X[k])*P[j]};

f[i][1]=mini<j<=n{f[i+1][0],f[i+1][1]}+C[i];

令S[j]=∑i<=k<j(X[j]-X[k])*P[k]。

则S[j]=∑i<=k<j(X[j]*P[k]-X[k]*P[k])=∑i<=k<jX[j]*P[k]-∑i<=k<jX[k]*P[k]=X[j]*∑i<=k<jP[k]-∑i<=k<jX[k]*P[k]。

不妨令A[x]=X[x]*P[x]。

那么S[j]可以用后缀和表示为:S=X[j]*(sumP[i]-sumP[j])-(sumA[i]-sumA[j])。

所以f[i][0]=min{f[j][1]+X[j]*(sufP[i]-sufP[j])-(sufA[i]-sufA[j])} 。

把式子化成一次函数可得:

f[j]-X[j]*sufP[j]+sufA[j]=-sufP[i]*X[j]+sufA[i]+f[i]

从后往前维护一个斜率单调递减的下凸壳即可。

需要注意的是,每次应先转移好fi。

因为y中含有f[i],没转移好f[i]会影响i入队时去尾操作。

#include<bits/stdc++.h>
#define RG register
#define IL inline
#define DB double
#define int long long
using namespace std;IL int gi() {RG int x=0,w=0; char ch=0;while (ch<'0'||ch>'9') {if (ch=='-') w=1;ch=getchar();}while (ch>='0'&&ch<='9') x=(x<<3)+(x<<1)+(ch^48),ch=getchar();return w?-x:x;
}const int N=1e6+10;int l,r,q[N];
int n,P[N],X[N],C[N],A[N],sufA[N],sufP[N],f[N][2];IL DB Y(int x) {return (DB)f[x][1]-X[x]*sufP[x]+sufA[x];}
IL DB slope(int x,int y) {return (Y(x)-Y(y))/(DB)(X[x]-X[y])*1.0;}signed main ()
{RG int i,j;n=gi();for (i=1;i<=n;++i)X[i]=gi(),P[i]=gi(),C[i]=gi(),A[i]=P[i]*X[i];for (i=n;i>=1;--i)sufP[i]=sufP[i+1]+P[i],sufA[i]=sufA[i+1]+A[i];memset(f,0x3f,sizeof(f));l=r=1,q[1]=n,f[n][1]=C[n];for (i=n-1;i>=1;--i) {f[i][1]=min(f[i+1][0],f[i+1][1])+C[i];/*for (j=i+1;j<=n;++j)f[i][0]=min(f[i][0],f[j][1]+X[j]*(sufP[i]-sufP[j])-(sufA[i]-sufA[j]));//f[j][1]-X[j]*sufP[j]+sufA[j]=-sufP[i]*X[j]+sufA[i]+f[i][0];*/while (l<r&&slope(q[l],q[l+1])>=(DB)-sufP[i]) ++l;f[i][0]=f[q[l]][1]+X[q[l]]*(sufP[i]-sufP[q[l]])-(sufA[i]-sufA[q[l]]);while (l<r&&slope(i,q[r])>=slope(q[r],q[r-1])) --r;q[++r]=i;}printf("%lld\n",min(f[1][1],f[1][0]));return 0;
}

BY BHLLX

转载于:https://www.cnblogs.com/Bhllx/p/10368232.html

仓库建设-斜率优化DP相关推荐

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

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

  2. 斜率优化dp 的简单入门

    不想写什么详细的讲解了...而且也觉得自己很难写过某大佬(大米饼),于是建议把他的 blog 先看一遍,然后自己加了几道题目以及解析...顺便建议看看算法竞赛(蓝皮书)的 0x5A 斜率优化(P294 ...

  3. 【总结】斜率优化DP

    于是,XSC062开始写总结. 斜率优化DP 前置芝士 单调队列优化DP(夹带私货) 正文 我们以一道题为例. 打印文章 双倍经验 三倍经验 Solution 明显DP. 那么DP式就是: f i = ...

  4. NOI2007 货币兑换 - CDQ分治斜率优化dp

    斜率优化dp维护一个凸壳.如果\(x, y\)坐标都递增,可以用单调队列,如果只有\(x\)递增,可以在凸壳上二分斜率,如果\(x, y\)都不递增,则需要在凸包中插入,可以用平衡树或cdq分治维护. ...

  5. CF-311B Cats Transport(斜率优化DP)

    题目链接 题目描述 小S是农场主,他养了 \(M\)只猫,雇了 \(P\) 位饲养员. 农场中有一条笔直的路,路边有 \(N\) 座山,从 \(1\) 到 \(N\)编号. 第 \(i\) 座山与第 ...

  6. 【洛谷3648】[APIO2014] 序列分割(斜率优化DP)

    点此看题面 大致题意: 你可以对一个序列进行\(k\)次分割,每次得分为两个块元素和的乘积,求总得分的最大值. 区间\(DPor\)斜率优化\(DP\) 这题目第一眼看上去感觉很明显是区间\(DP\) ...

  7. HDU-3507Print Article 斜率优化DP

    学习:https://blog.csdn.net/bill_yang_2016/article/details/54667902 HDU-3507 题意:有若干个单词,每个单词有一个费用,连续的单词组 ...

  8. APIO2010 特别行动队 斜率优化DP算法笔记

    做完此题之后 自己应该算是真正理解了斜率优化DP 根据状态转移方程$f[i]=max(f[j]+ax^2+bx+c),x=sum[i]-sum[j]$ 可以变形为 $f[i]=max((a*sum[j ...

  9. HDU 3507 Print Article(斜率优化DP)

    题目链接 题意 : 一篇文章有n个单词,如果每行打印k个单词,那这行的花费是,问你怎么安排能够得到最小花费,输出最小花费. 思路 : 一开始想的简单了以为是背包,后来才知道是斜率优化DP,然后看了网上 ...

  10. HDU 2993 MAX Average Problem(斜率优化DP)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2993 题目大意:给定一个长度为n(最长为10^5)的正整数序列,求出连续的最短为k的子序列平均值的最大 ...

最新文章

  1. Apache Artemis —— 非堵塞 Java 嵌入消息服务
  2. 【转】激活 ActiveX 控件
  3. selenium + python 登录页面,输入账号、密码,元素定位问题
  4. dreamweaver中的JSP的编程环境配置
  5. Git 在推送(Push)信息的时候提示git did not exit cleanly (exit code 1)的解决办法
  6. 八位图 16位图_了解位图
  7. 后台模拟页面登陆_模拟炒股软件支付宝同花顺都可以快速体验炒股
  8. 【CodeSnippet】Gradle
  9. 基于Lumisoft.NET组件的POP3邮件接收和删除操作
  10. 自定义控件--CircleImageView(类似于QQ、微信圆形头像自定义控件)
  11. 【数据结构】栈、队列、堆的python实现
  12. 20180326-1777-1.2-UMLDOC
  13. NDT 算法和一些常见配准算法
  14. mysql动态代理_动态代理连接数据库
  15. 数学建模——线性规划篇
  16. nanomsg安装和测试
  17. 卡尔曼滤波器和六轴传感器姿态融合资料整理
  18. 使用短信接口进行通知
  19. CTR预估 论文精读(十七)--ESMM: Entire Space Multi-Task Model
  20. 树莓派 MFRC522 读取

热门文章

  1. hdu 1003 Max Sum 简单动态规划
  2. 苹果mac智能手写笔记软件:GoodNotes 5 +iCloud同步
  3. inDesign教程,如何控制文档中的页数?
  4. 苹果Mac 3D 建模渲染软件:Vectorworks
  5. iOS的帮助网站(企业包发布)adhoc的测试
  6. 整站数据下载工具:SiteSucker for mac
  7. 如何在Mac上更改声音输出设置呢?
  8. 在 Mac 上的“访达”中排序和排列项目
  9. DataGrid相邻行有相同内容时对指定列合并和C#可以实现DLL库的动态调用
  10. Office远程代码执行漏洞CVE-2017-8570 大部分版本受影响 PoC已经公开