[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 ...
随机推荐
- Jenkins自动打包并部署(以java -jar形势运行)
1.打包 与平常maven项目打包一致,不再赘述 2.杀死原有进程 通过 pid=`ps -ef|grep $APP_NAME|grep -v grep|awk '{print $2}' ` 获取当前 ...
- 这个 'ip' 竟然把我搞蒙圈了……
1.查看redis连接配置(某项目) <bean id="redisCacheServer" class="com.spring.cache.RedisCacheS ...
- 奇怪的 Markdown / LaTeX 笔记
记一下日常见到的一些奇怪的 Markdown / LaTeX 用法... Markdown LaTeX LaTeX 数学 1. 运算符 1.1 造运算符: a \operatorname{sin} c ...
- [算法]概率与期望DP
前言 前两节主要针对题目分析,没时间的珂以跳过. 初步 首先举一道简单.经典的好题: [Lightoj1038]Race to 1 Again 懒得单独写,安利一下DennyQi同学的博客:https ...
- 【BZOJ3894】 文理分科
Description 文理分科是一件很纠结的事情!(虽然看到这个题目的人肯定都没有纠 结过) 小P所在的班级要进行文理分科.他的班级可以用一个n*m的矩阵进行 描述,每个格子代表一个同学的座位. ...
- vim编辑器快捷键
光标控制命令 命令 光标移动 h或^h 向左移一个字符 j或^j或^n 向下移一行 k或^p 向上移一行 l或空格 向右移一个字符 G 移到文件的最后一行 nG 移到文件的第n行 w 移到下一个字的开 ...
- Spring Data JPA学习笔记
下面先来介绍一下JPA中一些常用的查询操作: //And --- 等价于 SQL 中的 and 关键字,比如 findByHeightAndSex(int height,char sex): publ ...
- RestFul的无状态规则详解
无状态原则 Statelessness:无状态原则是RESTful架构设计中一个非常重要的原则,无状态是相对于有状态而言的.在理解什么是无状态的交互请求之前,首先我们需要了解什么是有状态,并对两者进行 ...
- csdn专家主页
百度张瑞琪: http://blog.csdn.net/abcjennifer 深度学习系列教程: http://suanfazu.com/t/caffe/9479
- md5sum c实现
#include <stdio.h>#include <ctype.h> #define STR_VALUE(val) #val#define STR(name) STR_VA ...