[Bzoj1911][Apio2010]特别行动队(斜率优化)
斜率优化的经典模型,将序列分成若干段,每段有一个权值计算方法,求权值和最大/小
暴力的dp $O(n^{2})$
dp[i]为1-i的序列的最优解。sum[i]为前缀和,$D(i)=ax^{2}+bx+c$
转移为$dp[i]=\max_{j=0}^{i-1}dp[j]+D(sum[i]-sum[j])$
然后叒是经典的推公式:
设$k<j<i$,且i从j转移比i从k转移更优。
$dp[j]+a(sum[i]-sum[j])^{2}-b(sum[i]-sum[j])+c\geq dp[k]+a(sum[i]-sum[k])^{2}-b(sum[i]-sum[k])+c$
$dp[j]+asum[j]^{2}-bsum[j]-(dp[k]+asum[k]^{2}-bsum[k])\geq 2asum[i](sum[j]-sum[k])$
$\frac{dp[j]+asum[j]^{2}-bsum[j]-(dp[k]+asum[k]^{2}-bsum[k])}{sum[j]-sum[k]}\geq 2asum[i]$
设 $f[j]=dp[j]+sum[j]^{2}-bsum[j]$ $T[j]=sum[j]$
$\frac{f[j]-f[k]}{T[j]-T[k]}\geq 2asum[i]$
将$(T[j],f[j])$,$(T[k],j[k])$看成二维平面上的点。所以当斜率$K_{jk}\geq 2asum[i]$时,从dp[j]转移比dpk]更优。
所以用优先队列维护最优的点集,就A了。
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn = 1e6 + ;
ll sum[maxn], q[maxn], dp[maxn], que[maxn];
int n, a, b, c;
ll f(int j, int k) {
return dp[j] + a * sum[j] * sum[j] - b * sum[j] - (dp[k] + a * sum[k] * sum[k] - b * sum[k]);
}
ll T(int j, int k) {
return sum[j] - sum[k];
}
ll D(int x) {
return a * x*x + b * x + c;
}
int main() {
scanf("%d", &n);
scanf("%d%d%d", &a, &b, &c);
for (int i = ; i <= n; i++)
scanf("%lld", &q[i]), sum[i] = sum[i - ] + q[i];
int l = , r = ;
que[l] = ;
for (int i = ; i <= n; i++) {
while (l < r&&f(que[l + ], que[l]) >= * a*sum[i] * T(que[l + ], que[l]))
l++;
dp[i] = dp[que[l]] + D(sum[i] - sum[que[l]]);
while (l < r && f(que[r], que[r - ])*T(i, que[r]) < T(que[r], que[r - ])*f(i, que[r]))
r--;
que[++r] = i;
}
printf("%lld\n", dp[n]);
}
[Bzoj1911][Apio2010]特别行动队(斜率优化)的更多相关文章
- bzoj1911[Apio2010]特别行动队 斜率优化dp
1911: [Apio2010]特别行动队 Time Limit: 4 Sec Memory Limit: 64 MBSubmit: 5057 Solved: 2492[Submit][Statu ...
- bzoj1911 [Apio2010]特别行动队——斜率优化DP
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1911 相当明显的斜率优化,很好做: 注意slp里面要有(double),以免出现精度问题. ...
- [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: 4142 Solved: 1964[Submit][Statu ...
- bzoj 1911: [Apio2010]特别行动队 -- 斜率优化
1911: [Apio2010]特别行动队 Time Limit: 4 Sec Memory Limit: 64 MB Description Input Output Sample Input 4 ...
- 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
想了好久啊....——黑字为第一次更新.——这里是第二次更新,维护上下凸包据题而论,第一种方法是化式子的方法,需要好的化式子的方法,第二种是偏向几何,十分好想,纯正的维护凸包的方法,推荐. 用了我感觉 ...
- 洛谷P3628 [APIO2010]特别行动队 斜率优化
裸题,注意队列下标不要写错 Code: #include<cstdio> #include<algorithm> #include<cmath> using nam ...
- BZOJ1911 [Apio2010]特别行动队 【斜率优化】
1911: [Apio2010]特别行动队 Time Limit: 4 Sec Memory Limit: 64 MB Submit: 5005 Solved: 2455 [Submit][Sta ...
随机推荐
- iOS中延迟执行和取消的几种方式
公用延迟执行的方法: - (void)delayMethod { NSLog(@"delayMethodEnd"); } 方法一.performSelector 方法 1.延迟执行 ...
- vertical-greenplum
https://github.com/sumitchawla/docker-vertica You can either pull the image from Docker Registry usi ...
- 【BZOJ3876】 [Ahoi2014]支线剧情
Description [故事背景] 宅男JYY非常喜欢玩RPG游戏,比如仙剑,轩辕剑等等.不过JYY喜欢的并不是战斗场景,而是类似电视剧一般的充满恩怨情仇的剧情.这些游戏往往 都有很多的支线剧情,现 ...
- 编译高博十四讲代码遇到依赖项g2o和cholmod的坑
1. 找不到g2o库!在CMakeLists.txt中使用指令 message(STATUS "${G2O_FOUND}") 打印结果为NO. 问题描述: CMakeLists.t ...
- JMS学习九(ActiveMQ的消息持久化到Mysql数据库)
1.将连接Mysql数据库的jar文件,放到ActiveMQ的lib目录下 2.修改ActiveMQ的conf目录下的active.xml文件,修改数据持久化的方式 2.1 修改原来的kshadb的 ...
- java 强弱软虚 四种引用,以及用到的场景
1.利用软引用和弱引用解决OOM问题:用一个HashMap来保存图片的路径和相应图片对象关联的软引用之间的映射关系,在内存不足时,JVM会自动回收这些缓存图片对象所占用的空间,从而有效地避免了OOM的 ...
- Spring下面的@Transactional注解的讲解
摘自: https://www.cnblogs.com/xiohao/p/4808088.html Spring下面的@Transactional注解标志的讲解 最近在开发中对Spring中的事务标记 ...
- cmake使用2
CMake支持大写.小写.混合大小写的命令. . 添加头文件目录INCLUDE_DIRECTORIES 语法:include_directories([AFTER|BEFORE] [SYSTEM] d ...
- VGA接口一根针折了
注意!!要由 针 对照着 接口 看!!别看反了! VGA接头图如下: VGA接口,15根针,其对应接口定义如下: 1红基色 red 2 绿基色 green 3 蓝基色 blue 4 地址码 ID Bi ...
- 3、Shiro授权
Shiro授权过程和认证过程相似: 项目结构: package com.shiro.shiroframe; import org.apache.shiro.SecurityUtils; import ...