又是斜率dp= =

f[i]=MAX(f[x]+a*sqr(f[i]-f[x])+b*(f[i]-f[x])+c)

设对于f[x] f[i]+a*sqr(s[x]-s[i])+b*(s[x]-s[i])+c>f[j]+a*sqr(s[x]-s[j])+b*(s[x]-s[j])+c

整理得 (v(i)-v[j])/(s[i]-s[j])<2a*s[x]  (v[x]=f[x]+a*s[x]*s[x]-b*s[x])

然后就证明s[x]单调

就行了

CODE:

#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
#define maxn 1000010
long long f[maxn],sum[maxn];
int s[maxn],a,b,c,n;
long long v(int x,int y){
 return (f[x]+a*sum[x]*sum[x]-b*sum[x])-(f[y]+a*sum[y]*sum[y]-b*sum[y]);
}
int main(){
 scanf("%d",&n);
 scanf("%d%d%d",&a,&b,&c);
 for (int i=1;i<=n;i++) {
  int x;
  scanf("%d",&x);
  sum[i]=sum[i-1]+x;
 }
 s[1]=0;
 int h=1,t=1;
 for (int i=1;i<=n;i++){
  while (h<t&&v(s[h],s[h+1])<=2*a*sum[i]*(sum[s[h]]-sum[s[h+1]]))h++;
  f[i]=f[s[h]]+a*(sum[i]-sum[s[h]])*(sum[i]-sum[s[h]])+b*(sum[i]-sum[s[h]])+c;
  while (h<t&&v(s[t],i)*(sum[s[t-1]]-sum[s[t]])>=v(s[t-1],s[t])*(sum[s[t]]-sum[i])) t--;
  s[++t]=i;
 }
 printf("%lld\n",f[n]);
 return 0;
}

转载于:https://www.cnblogs.com/New-Godess/p/4348956.html

BZOJ 1911: [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]特别行动队 2011-12-26

    1911: [Apio2010]特别行动队 Time Limit: 4 Sec  Memory Limit: 64 MB Submit: 892  Solved: 359 [Submit][Statu ...

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

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

  4. [BZOJ] 1911 [Apio2010]特别行动队

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

  5. bzoj 1911: [Apio2010]特别行动队【斜率优化dp】

    仔细想想好像没学过斜率优化.. 很容易推出状态转移方程\( f[i]=max{f[j]+a(s[i]-s[j])^2+b(s[i]-s[j])+c} \) 然后考虑j的选取,如果选j优于选k,那么: ...

  6. 1911: [Apio2010]特别行动队

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

  7. [APIO2010]特别行动队

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

  8. [APIO2010] 特别行动队

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

  9. 【斜率优化】[APIO2010]特别行动队

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

最新文章

  1. linux kvm虚拟化命令,Linux系统下kvm虚拟化(三)日常管理常用命令和配置说明
  2. 马化腾发起的科学探索奖首次颁出,50名中国大陆青年学者获奖,每人获300万资助...
  3. mdx词典包_推荐几款实用的英语词典
  4. Linux 软件包管理命令
  5. plsql developer无监听程序_无停机优雅重启 Go 程序
  6. 算法设计与分析——贪心算法——背包问题
  7. QuickBooks和Sage数据导出器
  8. linux下飞信安装详细过程
  9. STC学习:霍尔开关器件
  10. 飞桨2.0高层api教程——使用BERT实现自动写诗
  11. 基础柱状图的高配-多色柱状图
  12. 业务流程图(TFD)实例
  13. python搜索引擎的设计与实现_Python搜索引擎实现原理和方法
  14. simplest_ffmpeg_streamer加注释版
  15. 小米手机刷机-线刷-以K30Pro为例
  16. Python3高级篇
  17. C语言中的%p是什么意思?
  18. 会话、张量、变量OP
  19. 数字集成电路设计-1-用一个mux和一个inv实现异或
  20. 第2章 C语言的数值数据与非数值数据 (二)

热门文章

  1. 相分离相关文章阅读Cancer-Specific Retargeting of BAF Complexes by a Prion-like Domain
  2. java批量上传文件_Spring Boot2(十四):单文件上传/下载,文件批量上传
  3. 使用ggplot2画图
  4. python请输入星期几的第一个_python如何获取星期几
  5. php监测tomcat,java_JAVA实现监测tomcat是否宕机及控制重启的方法,本文实例讲述了JAVA实现监测tom - phpStudy...
  6. PHP两文件嵌套循环引用,php的循环与引用的一个坑,php循环引用_PHP教程
  7. 左右边界二分查找小总结
  8. 系统学习机器学习之神经网络(十) --BAM网络
  9. KNN(七)--最近邻及OpenCV源码分析
  10. mapreduce task与spark task对比