【题目描述】

有n个数,分成连续的若干段,每段的分数为a*x^2+b*x+c(a,b,c是给出的常数),其中x为该段的各个数的和。求如何分才能使得各个段的分数的总和最大。

【输入格式】 

第1行:1个整数N (1 <= N <= 1000000)。

第2行:3个整数a,b,c(-5<=a<=-1,|b|<=10000000,|c|<=10000000

下来N个整数,每个数的范围为[1,100]。

【输出格式】 

    一个整数,各段分数总和的值最大。

SAMPLE INPUT

5 4

1 2 40

1 4 20

2 4 20

2 3 30

3 4 10

SAMPLE OUTPUT

50

裸的斜率优化。

 1 #include<cstdio>
 2 #include<cstdlib>
 3 #include<cstring>
 4 #include<cmath>
 5 #include<iostream>
 6 #include<algorithm>
 7 #include<queue>
 8 using namespace std;
 9
10 typedef long long LL;
11 const int N=1000010;
12 LL n,a,b,c,s[N],f[N],Q[N];
13
14 // f[i]=a[i]*x[j]+b[j]
15 // a[i]=-2*a*s[i]
16 // x[j]=s[j]
17 // b[j]=f[j]+a*s[j]*s[j]-b*s[j]
18 // t[i]=a*s[i]*s[i]+b*s[i]+c
19
20 double X(LL i){return s[i];}
21 double Y(LL i){return f[i]+a*s[i]*s[i]-b*s[i];}
22 double find_k(LL i,LL j){return (Y(i)-Y(j))/(X(i)-X(j));}
23
24 int main()
25 {
26     // freopen("a.in","r",stdin);
27     freopen("commando.in","r",stdin);
28     freopen("commando.out","w",stdout);
29     scanf("%lld",&n);
30     scanf("%lld%lld%lld",&a,&b,&c);
31     s[0]=0;
32     for(int i=1;i<=n;i++)
33     {
34         LL x;
35         scanf("%lld",&x);
36         s[i]=s[i-1]+x;
37     }
38     f[0]=0;Q[0]=0;
39     LL l=0,r=0,ai,j,xj,bj,ti;
40     for(int i=1;i<=n;i++)
41     {
42         ai=(-2)*a*s[i];
43         while(l<r && find_k(Q[l],Q[l+1])>=(-ai)) l++;
44         j=Q[l];
45         xj=s[j];
46         bj=f[j]+a*s[j]*s[j]-b*s[j];
47         ti=a*s[i]*s[i]+b*s[i]+c;
48         f[i]=ai*xj+bj+ti;
49         while(l<r && find_k(Q[r],Q[r-1])<find_k(i,Q[r])) r--;
50         Q[++r]=i;
51         // printf("f %d  =  %d\n",i,f[i]);
52     }
53     printf("%lld\n",f[n]);
54     return 0;
55 }

转载于:https://www.cnblogs.com/KonjakJuruo/p/5890571.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. html动态报警图片,报警记录.html
  2. erdas2015几何校正模块在哪_erdas图像几何校正操作步骤指南
  3. JQuery中样式标签的处理
  4. rpm mysql 忘记密码_mysql密码忘记该怎么办?
  5. SpringBoot登录拦截器
  6. 6.字符串截取数据求平均分
  7. Atitit.为什么小公司也要做高大上开源项目
  8. 计算机毕设 SpringBoot+Vue旧物置换系统 旧物交易管理系统 旧物二手交易系统Java Vue MySQL数据库 远程调试 代码讲解
  9. php微信公众号过滤微信qq表情
  10. 刨根问底 | 红遍全网的SD-WAN,到底是个啥?
  11. 使用plsql导出数据库表中数据
  12. Vue2学习笔记1 - win10下安装vue开发环境
  13. Excel 日期相减 DATEDIF 函数用法实例
  14. android如何拨打电话
  15. 俄罗斯套娃信封问题 转https://www.jianshu.com/p/9d9495ef4372
  16. java语言的三个版本是_Java是一个全面且功能强大的语言,可用于多种用途。Java有三个版本分别是:_学小易找答案...
  17. 广告流量反作弊风控中的模型应用
  18. DTU是什么及其用途
  19. flutter坑奇遇记
  20. linux线程 ppt,Linux多线程编程多核编程.ppt

热门文章

  1. markdown数学公式手册
  2. FCGF论文阅读笔记
  3. 【论文学习】Fast End-to-End Trainable Guided Filter
  4. python发动机曲轴连杆动力学计算
  5. CSU 1573 最多的数字
  6. 从JVM的角度看JAVA代码--代码优化
  7. 【基础】【后台】 微信小程序 - 腾讯云 - wafer2 - PHP - DEMO - 003 - 源码分析 - 02 - 路由
  8. 分子动力学模拟软件_分子模拟软件Discovery Studio教程(十三):构建PLS模型(3D-QSAR)...
  9. mysql插10万条数据_如何快速安全的插入千万条数据?
  10. 终端母体服务器是心识,自我意识的觉醒与重返母体的归属.doc