【笔记篇】斜率优化dp(三) APIO2010特别行动队
旁听了一波给舒老师和学弟的pkuwc面试讲座...
这里有一段隐身的吐槽, 想看的请自己想办法观看. 不想看的跳过这一段看似空白的东西就好了...
刚开始ATP学姐给我们讲了自己面试的时候的事情..描绘了一下当时面试的场面和当时问的问题..(ATP学姐太可爱了OvO)可能准备的也不是很充足 用了好多的"然后" "就是"之类的, 自己也在吐槽, 老师后来也槽来着, (不过还是超可爱n(≧▽≦)n)旁边老师在记录, 尤其记下了一个什么"你认为学习信息男生和女生有什么区别?"的问题..(可是这种问题怎么可能问男生啊讲道理), 然后学姐讲完之后就是shallwe大爷来讲, shallwe大爷还准备了稿子, 然后就讲了一些面基技巧.. 但是也是比较老生常谈的东西, 之前参加各种各样的风采大赛回答问题的时候也就是那一套之类的 小时候还能做到, 现在反而越来越不行了.. 然后讲了各种各样的问题, 说是问的问题都在blog里面.. 老师还说要blog的地址来给学弟学妹什么的(那也就是包括我们咯), 但是听完回来一看这blog里的东西能给老师看?! 各种吐槽甚至还有吐槽面试培训的.. 然后他们就回去学习了= =
老师就开始种讲评, 还让两个人分别回答了上面说的男女区别问题 然后两个都做出了比较"片面"的回答, 老师就说要往什么三个方面想之类的说了一堆, 反正就是不怼人的同时优雅地装逼的技巧, (什么在北大不说清华比北大强之类的, 说了确定不是石乐志么= =)然后再就是"你有什么缺点", 听说年年问...(大家准备好的答案都能倒着背了好么)就说要找个"不是缺点的缺点", 然后两个人都说自己比较执着啊... 就不能找点有创意的么←_←, 感觉全世界都有执着得有点傻这个缺点... 要我的话可能会说自己好奇心过强? 反正就这么着吧. 然后还有什么进门关门鞠躬瞅瞅有没有废纸倒拖把什么的... 反正就是一些鸡汤文里描写的面试的细节问题, 还有着装问题, 我觉得只要不是明显违和的穿女装应该都不是什么大问题吧←_←(对没错哪怕是可爱的男孩纸穿女装其实也是可以哒(≧▽≦)/)两个人又练了一波关门鞠躬之类的 终于煎熬地熬过去了.. 然后赶紧去了个厕所 毕竟半下午+半晚上没有去了.. 回来之后就调这个题 不过很快就调A了这还比较和善..(嗯 主要原因是这次的luogu没有出锅...)
=我=是=一=条=分=割=线=我=也=是=一=扇=传=送=门=
继续吐槽, 不过这次跟题目有关了.. 听完回来就继续写这道题啊...
这道题显然支持\(O(n)\)的做法, (感觉1e6的话套个log就不是很靠谱了)
那就是要优化, 就是要化式子嘛..然后刚开始以为这个题是
\]
然后最大化\(\sum_{i=1}^nx_i^2\)之后直接输出\(a*f[n]+b*s[n]+n*c\)的大水题,
但是发现好像样例差了好多好多...结果发现自己快读没读负数...
然后改完之后输出负数了... 手玩了一下发现好像这个\(n*c\)的\(n\)好像不一定是题目里给的\(n\)...
那就不能这么化式子了, 就开始重新化.. 还是得从状态转移方程入手...
\]
然后去括号
\]
移项能得到
\(f[j]+as[j]^2-bs[j]\)=\(2as[i]\)\(s[j]\)+\(f[i]-(as[i]^2+bs[i]+c)\)
由于题目中已经给了\(-5<a<-1\), 所以斜率一定是<0的, 而\(f[j]+as[j]^2-bs[j]\)直观上很明显是递减的. 我们考虑凸性对结果的影响.
我们考虑中间的点在位于两个斜率中间(大于大斜率小于小斜率显然不优就不考虑了)的情况.
发现如果是位于下凸壳的点是不优的, 而位于上凸壳的点是优的, 我们就要维护一个上凸壳.
而这里的斜率\(2as[i]\)显然是递减的(绝对值递增), 所以
如果一个斜率一旦已经小于(绝对值大)于队首的边, 那么队首的点在以后也不会优了 我们让队首出队即可.
依然是维护一个单调队列.
然后就没有了. 代码: 1A了哈哈哈哈 (放肆地笑ing...)
#include <cstdio>
const int N=16+6;
typedef long long LL;
LL f[N],s[N]; int q[N],h,t,a,b,c,n;
inline int gn(int a=0,char c=0,int f=1){
for(;(c<48||c>57)&&c!='-';c=getchar());if(c=='-')f=-1,c=getchar();
for(;c>='0'&&c<='9';c=getchar()) a=a*10+c-'0'; return a*f;
}
inline double slope(int x,int y){
return 1.0*(f[x]+a*s[x]*s[x]-b*s[x]-f[y]-a*s[y]*s[y]+b*s[y])/(s[x]-s[y]);
}
int main(){ n=gn(); a=gn(); b=gn(); c=gn();
for(int i=1;i<=n;++i) s[i]=s[i-1]+gn();
for(int i=1;i<=n;++i){
while(h<t&&slope(q[h],q[h+1])>=2*a*s[i]) ++h;
f[i]=f[q[h]]+a*(s[i]-s[q[h]])*(s[i]-s[q[h]])+b*(s[i]-s[q[h]])+c;
while(h<t&&slope(q[t],q[t-1])<=slope(q[t],i)) --t;
q[++t]=i;
} printf("%lld",f[n]);
}
【笔记篇】斜率优化dp(三) APIO2010特别行动队的更多相关文章
- 「学习笔记」斜率优化dp
目录 算法 例题 任务安排 题意 思路 代码 [SDOI2012]任务安排 题意 思路 代码 任务安排 再改 题意 思路 练习题 [HNOI2008]玩具装箱 思路 代码 [APIO2010]特别行动 ...
- 一本通提高篇——斜率优化DP
斜率优化DP:DP的一种优化形式,主要用于优化如下形式的DP f[i]=f[j]+x[i]*x[j]+... 学习可以参考下面的博客: https://www.cnblogs.com/Xing-Lin ...
- 学习笔记:斜率优化DP
作为数学渣,先复习一下已知两点\((x_1, y_1)\), \((x_2, y_2)\),怎么求过两点的一次函数的斜率... 待定系数法代入 \(y = kx + b\) 有: \(x_1k + b ...
- hdu3507 斜率优化学习笔记(斜率优化+dp)
QWQ菜的真实. 首先来看这个题. 很显然能得到一个朴素的\(dp\)柿子 \[dp[i]=max(dp[i],dp[j]+(sum[i]-sum[j])^2) \] 但是因为\(n\le 50000 ...
- APIO2010 特别行动队 & 斜率优化DP算法笔记
做完此题之后 自己应该算是真正理解了斜率优化DP 根据状态转移方程$f[i]=max(f[j]+ax^2+bx+c),x=sum[i]-sum[j]$ 可以变形为 $f[i]=max((a*sum[j ...
- BZOJ 1911: [Apio2010]特别行动队( dp + 斜率优化 )
sum为战斗力的前缀和 dp(x) = max( dp(p)+A*(sumx-sump)2+B*(sumx-sump)+C )(0≤p<x) 然后斜率优化...懒得写下去了... ------- ...
- [APIO2010]特别行动队 --- 斜率优化DP
[APIO2010]特别行动队 题面很直白,就不放了. 太套路了,做起来没点感觉了. \(dp(i)=dp(j)+a*(s(i)-s(j))^{2}+b*(s(i)-s(j))+c\) 直接推出一个斜 ...
- bzoj 1911 [Apio2010]特别行动队(斜率优化+DP)
1911: [Apio2010]特别行动队 Time Limit: 4 Sec Memory Limit: 64 MBSubmit: 3191 Solved: 1450[Submit][Statu ...
- bzoj1911[Apio2010]特别行动队 斜率优化dp
1911: [Apio2010]特别行动队 Time Limit: 4 Sec Memory Limit: 64 MBSubmit: 5057 Solved: 2492[Submit][Statu ...
- 【笔记篇】斜率优化dp(一) HNOI2008玩具装箱
斜率优化dp 本来想直接肝这玩意的结果还是被忽悠着做了两道数论 现在整天浑浑噩噩无心学习甚至都不是太想颓废是不是药丸的表现 各位要知道我就是故意要打删除线并不是因为排版错乱 反正就是一个del标签嘛并 ...
随机推荐
- 数据挖掘Aprior算法详解及c++源码
[算法大致描述] Aprior算法主要有两个操作,扫描数据库+统计.计算每一阶频繁项集都要扫描一次数据库并且统计出满足支持度的n阶项集. [算法主要步骤] 一.频繁一项集 算法开始第一步,通过扫描数据 ...
- vue-router 动态路由
上一篇文章我们已经配置好了路由,下面,来说说如何实现动态路由. 比如,我想在 news 页点击列表项,跳转到对应项,如图所示: 这里引用的数据是豆瓣电影,地址: http://api.douban.c ...
- 前端(八)—— 高级布局:文档流、浮动布局、流式布局、定位布局、flex布局、响应布局
高级布局:文档流.浮动布局.流式布局.定位布局.flex布局.响应布局 一.文档流 1.什么是文档流 将窗体自上而下分成一行一行,块级元素从上至下.行内元素在每行中从左至右的顺序依次排放元素 2.本质 ...
- git 常用命令 mv rm checkout revert reset
关于上节讲的git add 时需要添加注释信息,也可以在git commit时再添加 laoni@DESKTOP-TPPLHIB MINGW64 /c/laoni/PycharmProjects/gi ...
- jp@gc - Stepping Thread Group (deprecated)
并发6个用户,线程之前不等待,每隔3秒增加1个用户,间隔时间是2秒,然后并发数增加完成之后,运行60秒,运行完成后,每1秒钟停止2个用户
- 使用jQuery的datetimepicker插件
因为后台系统要使用年月日时分的设置,又因为使用的Bootstrap框架只有datepicker和timepicker控件.所以在jQuery库中找到轻量级的datetimepicker插件,很好地解决 ...
- 淘宝内核月报2014-11-draft
内核月报2014-11-draft MySQL· 捉虫动态·OPTIMIZE 不存在的表 bug 描述 这是一个和 GTID 相关的Bug,也就是说5.6才会有,并且出现这个 bug 需要满足条件: ...
- Linux 进程间通信 信号(signal)
1. 概念: 1)信号是在软件层次上对中断机制的一种模拟,是一种异步通信方式 2)信号可以直接进行用户空间进程和内核进程之间的交互,内核进程也可以利用它来通知用户空间进程发生了哪些系统事件. 3)如果 ...
- 反编译字节码角度分析synchronized关键字的原理
1.synchronized介绍 synchronized是java关键字.JVM规范中,synchronized关键字用于在线程并发执行时,保证同一时刻,只有一个线程可以执行某个代码块或方法:同时还 ...
- 51. TreeSet
集合分类:-------------------| Collection 单列集合的根接口 ---------------| List 如果实现了List接口的集合类,具备的特点是:有序,可重复- ...