题目链接

斜率优化的经典模型,将序列分成若干段,每段有一个权值计算方法,求权值和最大/小

暴力的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了。

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 typedef long long ll;
 4 const  int maxn = 1e6 + 10;
 5 ll sum[maxn], q[maxn], dp[maxn], que[maxn];
 6 int n, a, b, c;
 7 ll f(int j, int k) {
 8     return dp[j] + a * sum[j] * sum[j] - b * sum[j] - (dp[k] + a * sum[k] * sum[k] - b * sum[k]);
 9 }
10 ll T(int j, int k) {
11     return sum[j] - sum[k];
12 }
13 ll D(int x) {
14     return a * x*x + b * x + c;
15 }
16 int main() {
17     scanf("%d", &n);
18     scanf("%d%d%d", &a, &b, &c);
19     for (int i = 1; i <= n; i++)
20         scanf("%lld", &q[i]), sum[i] = sum[i - 1] + q[i];
21     int l = 1, r = 1;
22     que[l] = 0;
23     for (int i = 1; i <= n; i++) {
24         while (l < r&&f(que[l + 1], que[l]) >= 2 * a*sum[i] * T(que[l + 1], que[l]))
25             l++;
26         dp[i] = dp[que[l]] + D(sum[i] - sum[que[l]]);
27         while (l < r && f(que[r], que[r - 1])*T(i, que[r]) < T(que[r], que[r - 1])*f(i, que[r]))
28             r--;
29         que[++r] = i;
30     }
31     printf("%lld\n", dp[n]);
32 }

转载于:https://www.cnblogs.com/sainsist/p/11458134.html

[Bzoj1911][Apio2010]特别行动队(斜率优化)相关推荐

  1. bzoj 1911: [Apio2010]特别行动队 -- 斜率优化

    1911: [Apio2010]特别行动队 Time Limit: 4 Sec  Memory Limit: 64 MB Description Input Output Sample Input 4 ...

  2. BZOJ 1911: [Apio2010]特别行动队 [斜率优化DP]

    1911: [Apio2010]特别行动队 Time Limit: 4 Sec  Memory Limit: 64 MB Submit: 4142  Solved: 1964 [Submit][Sta ...

  3. 【bzoj1911】[Apio2010]特别行动队 斜率优化dp

    题目描述 输入 输出 样例输入 4 -1 10 -20 2 2 3 4 样例输出 9 题解 斜率优化dp 设f[i]表示前i个士兵的战斗力之和的最大值. 那么有f[i]=f[j]+a*(sum[i]- ...

  4. [APIO2010]特别行动队——[斜率优化DP]

    [题目描述] 你有一支由 n 名预备役士兵组成的部队,士兵从 1 到 n 编号,要将他们拆分 成若干特别行动队调入战场.出于默契的考虑,同一支特别行动队中队员的编号 应该连续,即为形如(i,i+1,. ...

  5. APIO2010 特别行动队 斜率优化DP算法笔记

    做完此题之后 自己应该算是真正理解了斜率优化DP 根据状态转移方程$f[i]=max(f[j]+ax^2+bx+c),x=sum[i]-sum[j]$ 可以变形为 $f[i]=max((a*sum[j ...

  6. 特别行动队-斜率优化

    APIO2010特别行动队 令S为前缀和,那么n方DP: f[i]=max{f[i],f[j]+a*(S[i]-S[j])*(S[i]-S[j])+b*(S[i]-S[j])+c}; 展开,移项得到: ...

  7. 「APIO2010」 特别行动队 - 斜率优化Dp

    题目描述 你有一支由nnn名预备役士兵组成的部队,士兵从1到nnn编号,要将他们拆分成若干特别行动队调入战场.出于默契考虑,同一支特别行动队中队员的编号应该连续,即为形如(i,i+1,...,i+k) ...

  8. bzoj1911 [Apio2010]特别行动队

    Description 你有一支由 n 名预备役士兵组成的部队,士兵从 1 到 n 编号,要将他们拆分 成若干特别行动队调入战场.出于默契的考虑,同一支特别行动队中队员的编号 应该连续,即为形如(i, ...

  9. [BZOJ1911] [Apio2010]特别行动队

    传送门 http://www.lydsy.com/JudgeOnline/problem.php?id=1911 题目大意 把连续的人分组,每组[j,k]的价值为a(∑ki=jx[i])2+b∑ki= ...

  10. 特别行动队[斜率优化]

    传送门 首先考虑暴力的DP sum(i--j) 可以用前缀和维护 把式子拆开 ...是一坨常数,这里省略了 我们令 y=f[j]+a*s[j]*s[j]-b*s[j]  ,  x=s[j]  ,  k ...

最新文章

  1. cogs 1430. [UVa 11300]分金币
  2. 利用计算机模拟人类的感知,利用计算机模拟人类的智能活动,属于计算机的什么应用领域...
  3. 图解Oracle 12c 安装示例数据库
  4. Spring Boot系列四 Spring @Value 属性注入使用总结一
  5. react ui框架 移动端_你必须要知道的移动端UI组件设计宝典
  6. 职场潜规则:领导常说的10句话,学会3句以上你不会混的太差!
  7. html请求接口_通用网关接口-FastCGI介绍
  8. 虚拟化系列-Windows server 2012 虚拟机管理
  9. JavaScript通过 new FileReader() 获取图片base64 无组件上传图片
  10. WCF开发入门的六个步骤
  11. 帝国 listenews.php,帝国cms7.2后台信息列表页批量添加tags
  12. 存储过程分页算法(收藏)
  13. 有关单元测试的 5 个建议
  14. django官方文档3.0学习笔记 02
  15. python全栈工程师知识框架_全栈工程师的知识结构
  16. Medium之1468.计算税后工资
  17. excel公式编辑器_动态提取符合多个条件的记录,公式躲远点
  18. Java笔记-递归(汉洛塔)
  19. Qtablewidget使用QHeaderView设置表头
  20. 部署web项目在腾讯云当中

热门文章

  1. 一对一单双向主键关联
  2. 和菜鸟一起深入学习国嵌实验之vim常用命令
  3. J2SE下的路径问题
  4. Common Lisp
  5. Egret入门学习日记 --- 第十五篇(书中 6.1~6.9节 内容)
  6. dnsmasq安装配置
  7. Java设计模式の适配器模式
  8. 事务复制中的msrepl_ccs
  9. WCF入门(七)——异常处理1
  10. 实现一个react系列一:JSX和虚拟DOM