传送门
写在前面:前来报道的学弟
思路:这是学习斜率优化后完全自己独立处理出的第一个题吧,感觉自己还是太弱,这么就初步理解斜率优化。
先推转移方程,这个还是比较好弄得
f[i]=c[i]+min(f[j]+∑ik=j+1p[k]∗(s[i]−s[k]))f[i]=c[i]+min(f[j]+∑^{i}_{k=j+1}p[k]*(s[i]-s[k]))
看似是一个O(n3)O(n^3),但我们把sigma里的东西拆开,处理前缀和
sum1[i]=∑ij=1p[j]∗s[j]sum1[i]=∑^{i}_{j=1}p[j]*s[j]
sum2[i]=∑ij=1p[j]sum2[i]=∑^{i}_{j=1}p[j]
那么转移就是
f[i]=c[i]+min(f[j]+s[i]∗(sum2[i]−sum2[j])−(sum1[i]−sum1[j]))f[i]=c[i]+min(f[j]+s[i]*(sum2[i]-sum2[j])-(sum1[i]-sum1[j]))
O(n2)O(n^2)可以得20分
正解是O(n)O(n)的
假设x>y且由x比y转移更优
然后一顿化简,得到
(f[x]−f[y]+sum1[x]−sum1[y])/(sum2[x]−sum2[y])<s[i](f[x]-f[y]+sum1[x]-sum1[y])/(sum2[x]-sum2[y])
接下来就代码了
注意:
有符号整型把我吓了一跳,还以为有负数个货物……
代码:

#include<bits/stdc++.h>
#define LL long long
#define M 1000002
using namespace std;
int n,head=1,tail=1;
int s[M],c[M],p[M],q[M];
LL f[M],sum1[M],sum2[M];
int in()
{int t=0,f=1;char ch=getchar();while (ch>'9'||ch<'0'){if (ch=='-') f=-1;ch=getchar();}while (ch>='0'&&ch<='9') t=(t<<3)+(t<<1)+ch-'0',ch=getchar();return f*t;
}
double Get(int x,int y)
{return (double)(f[x]-f[y]+(sum1[x]-sum1[y]))/(double)(sum2[x]-sum2[y]);
}
main()
{n=in();for (int i=1;i<=n;i++)s[i]=in(),p[i]=in(),c[i]=in(),sum1[i]=sum1[i-1]+(LL)p[i]*s[i],sum2[i]=sum2[i-1]+p[i];for (int i=1;i<=n;i++){while (head<tail&&Get(q[head+1],q[head])<(double)s[i]) head++;f[i]=f[q[head]]+c[i]+s[i]*(sum2[i]-sum2[q[head]])-(sum1[i]-sum1[q[head]]);while (head<tail&&Get(i,q[tail])<Get(q[tail],q[tail-1])) tail--;q[++tail]=i;}printf("%lld",f[n]);
}

【BZOJ1096】仓库建设,斜率优化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. GetWindowRect和GetClientRect(得到窗口坐标)
  2. maven的启动类和MAVEN_OPTS参数
  3. [java][工具类][Collections]
  4. 产品经理思维模型:文化母体、品牌寄生、超级符号
  5. c mysql 工具类_Jave工具——servlet+jsp编程中mysql数据库连接及操作通用工具类
  6. es6箭头函数_javascript-ES6函数进阶(箭头函数,默认参数)(笔记)
  7. e: 无法定位软件包 python-pip_关于Sony镜头不同系列定位的最全面分析
  8. 2个月快速通过PMP证书的经验分享
  9. HSqlDB(java内置数据库)
  10. 马哥linux高端班视频,马哥Linux高端运维云计算就业班
  11. python调用java的方法-JPype的简单使用
  12. 使用数字滤波器处理音频噪声(附Matlab程序)
  13. 自己动手编写CSDN博客备份工具-blogspider之源码分析(2)
  14. UIPATH Timeout reached
  15. minio error occured
  16. Unity网格系统(1)网格生成
  17. tif文件转为shp文件_在arcgis中怎么把tif格式的遥感图像转换为矢量图
  18. PowerBI-时间智能函数-DATES系列
  19. 简述sqlite数据库的特点_sqlite数据库的优缺点
  20. 洛谷P1034矩形覆盖题解--zhengjun

热门文章

  1. k 近邻算法解决字体反爬手段|效果非常好
  2. Reactive(2) 响应式流与制奶厂业务
  3. 【华为云技术分享】《跟唐老师学习云网络》 - Tcpdump大杀器抓包
  4. 野生前端的数据结构基础练习(4)——字典
  5. 开源大数据平台HBase对接OBS操作指南
  6. 【华为大咖分享】2.DevCloud on DevCloud 从1月1次到1天10次发布的实践分享(后附PPT下载地址)
  7. leetcode306 2022.1.10
  8. 高等组合学笔记(六): 第二类Stirling数,第一类Stirling数以及生成函数
  9. java 当前时间小时数,java获取当前时间前几个小时的时间
  10. python中session的使用方法_python中requests库session对象的妙用详解