P3628 [APIO2010]特别行动队(斜率优化dp)
设$s[i]$为战斗力前缀和
显然我们可以列出方程
$f[i]=f[j]+a*(s[i]-s[j])^{2}+b*(s[i]-s[j])+c$
$f[i]=f[j]+a*s[i]^{2}+b*s[i]-(2*a*s[i]+b)*s[j]+a*s[j]^{2}+c$
$a*s[j]^{2}+f[j]=(2*a*s[i]+b)*s[j]+f[i]-a*s[i]^{2}-b*s[i]-c$
又变成了喜闻乐见的$y=k*x+b$
$y=a*s[j]^{2}+f[j]$
$k=2*a*s[i]+b$
$x=s[j]$
$b=f[i]-a*s[i]^{2}-b*s[i]-c$
$x,k$都是单调
于是再来个熟悉的单调队列维护上凸包就好辣
使用叉积判断斜率大小会爆long long,请使用正常的斜率判断
#include<iostream>
#include<cstdio>
#include<cstring>
#define rint register int
using namespace std;
typedef long long ll;
typedef double db;
#define N 1000005
ll n,a,b,c,w,s[N],f[N];
int L=,R=,h[N];
inline db X(int i){return s[i];}
inline db Y(int i){return a*s[i]*s[i]+f[i];}
inline ll KK(ll xa,ll ya,ll xb,ll yb){return ya*xb-xa*yb;}//数据过大,叉积爆炸
inline db K(int x,int y){return (Y(x)-Y(y))/(X(x)-X(y));}
int main(){
//freopen("P3628.in","r",stdin);
scanf("%lld%lld%lld%lld",&n,&a,&b,&c);
for(rint i=;i<=n;++i) scanf("%lld",&s[i]),s[i]+=s[i-];
for(rint i=;i<=n;++i){
while(L<R&&K(h[L],h[L+])>=*a*s[i]+b) ++L;
w=s[i]-s[h[L]]; f[i]=f[h[L]]+a*w*w+b*w+c;
while(L<R&&K(h[R],h[R-])<=K(h[R],i)) --R;
h[++R]=i;
}printf("%lld",f[n]);
return ;
}
P3628 [APIO2010]特别行动队(斜率优化dp)的更多相关文章
- [APIO2010]特别行动队 --- 斜率优化DP
[APIO2010]特别行动队 题面很直白,就不放了. 太套路了,做起来没点感觉了. \(dp(i)=dp(j)+a*(s(i)-s(j))^{2}+b*(s(i)-s(j))+c\) 直接推出一个斜 ...
- bzoj1911[Apio2010]特别行动队 斜率优化dp
1911: [Apio2010]特别行动队 Time Limit: 4 Sec Memory Limit: 64 MBSubmit: 5057 Solved: 2492[Submit][Statu ...
- BZOJ 1911: [Apio2010]特别行动队 [斜率优化DP]
1911: [Apio2010]特别行动队 Time Limit: 4 Sec Memory Limit: 64 MBSubmit: 4142 Solved: 1964[Submit][Statu ...
- APIO2010 特别行动队 & 斜率优化DP算法笔记
做完此题之后 自己应该算是真正理解了斜率优化DP 根据状态转移方程$f[i]=max(f[j]+ax^2+bx+c),x=sum[i]-sum[j]$ 可以变形为 $f[i]=max((a*sum[j ...
- bzoj1911 [Apio2010]特别行动队——斜率优化DP
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1911 相当明显的斜率优化,很好做: 注意slp里面要有(double),以免出现精度问题. ...
- 【BZOJ1911】[Apio2010]特别行动队 斜率优化DP
想了好久啊....——黑字为第一次更新.——这里是第二次更新,维护上下凸包据题而论,第一种方法是化式子的方法,需要好的化式子的方法,第二种是偏向几何,十分好想,纯正的维护凸包的方法,推荐. 用了我感觉 ...
- 洛谷P3628 [APIO2010]特别行动队 斜率优化
裸题,注意队列下标不要写错 Code: #include<cstdio> #include<algorithm> #include<cmath> using nam ...
- bzoj 1911: [Apio2010]特别行动队 -- 斜率优化
1911: [Apio2010]特别行动队 Time Limit: 4 Sec Memory Limit: 64 MB Description Input Output Sample Input 4 ...
- APIO 2010 特别行动队 斜率优化DP
Description 你有一支由 n 名预备役士兵组成的部队,士兵从 1 到 n 编号,要将他们拆分 成若干特别行动队调入战场.出于默契的考虑,同一支特别行动队中队员的编号 应该连续,即为形如 (i ...
- BZOJ 1911 特别行动队(斜率优化DP)
应该可以看出这是个很normal的斜率优化式子.推出公式搞一搞即可. # include <cstdio> # include <cstring> # include < ...
随机推荐
- iOS 调试大法
本文转载至 http://www.jianshu.com/p/d19e19a91071 0.笨办法 看变量.对象?NSLog+重新编译运行:改某对象?改源码+重新编译运行:隔离某个方法?在方法中写 r ...
- ux.form.field.Year 只能选年的时间扩展
效果如图,亲测6.2.1版本可用,用法同时间选择控件 //只选择年的控件 Ext.define('ux.picker.Year', { extend: 'Ext.Component', alias: ...
- iOS - 数组字典模型根据模型属性key排序
方法一: NSArray *sortArray = [arrayM sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) { ...
- maven的tomcat插件启动报错
错误 :: java.lang.ClassCastException: org.springframework.web.filter.CharacterEncodingFilter cannot ...
- javascript 缩写技巧
19种JS高(炫)效(技)缩写法 https://segmentfault.com/a/1190000011229633
- Sring 类的例子
public class ZongHe { public static void main(String[] args) { function1(); funct ...
- Unity 为队伍设置不同颜色的shader
在魔兽争霸等一些游戏中,我们通过模型的颜色就能很轻松的区分队伍,如下: 实现的方法有很多,比如: 1,为不同队伍各出一张不同颜色的贴图(Hmmm,war3有的地图可以容纳12只队伍,美术大大们会很 ...
- vins-mono的边缘化分析
##marg 基础 摘自贺一家的博客 在我们这个工科领域,它来源于概率论中的边际分布(marginal distribution).如从联合分布p(x,y)去掉y得到p(x),也就是说从一系列随机 ...
- 转 消息中间件:RocketMQ 介绍(特性、术语、原理、优缺点、消息顺序、消息重复)
https://blog.csdn.net/jiangyu1013/article/details/81668671 消息中间件的作用 1. 应用解耦 2. 异步处理 比如用户注册场景,注册主流程完成 ...
- 架构4(lvs lb集群解决方案二 lvs+keepalived)
keepalived 1.实现调度器的HA 2.对realserver做健康检测 3.动态维护ipvs路由表