【bzoj1911-[Apio2010]特别行动队】斜率优化
【题目描述】
有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]特别行动队】斜率优化相关推荐
- bzoj 1911: [Apio2010]特别行动队 -- 斜率优化
1911: [Apio2010]特别行动队 Time Limit: 4 Sec Memory Limit: 64 MB Description Input Output Sample Input 4 ...
- BZOJ 1911: [Apio2010]特别行动队 [斜率优化DP]
1911: [Apio2010]特别行动队 Time Limit: 4 Sec Memory Limit: 64 MB Submit: 4142 Solved: 1964 [Submit][Sta ...
- 【bzoj1911】[Apio2010]特别行动队 斜率优化dp
题目描述 输入 输出 样例输入 4 -1 10 -20 2 2 3 4 样例输出 9 题解 斜率优化dp 设f[i]表示前i个士兵的战斗力之和的最大值. 那么有f[i]=f[j]+a*(sum[i]- ...
- [APIO2010]特别行动队——[斜率优化DP]
[题目描述] 你有一支由 n 名预备役士兵组成的部队,士兵从 1 到 n 编号,要将他们拆分 成若干特别行动队调入战场.出于默契的考虑,同一支特别行动队中队员的编号 应该连续,即为形如(i,i+1,. ...
- APIO2010 特别行动队 斜率优化DP算法笔记
做完此题之后 自己应该算是真正理解了斜率优化DP 根据状态转移方程$f[i]=max(f[j]+ax^2+bx+c),x=sum[i]-sum[j]$ 可以变形为 $f[i]=max((a*sum[j ...
- 特别行动队-斜率优化
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}; 展开,移项得到: ...
- 「APIO2010」 特别行动队 - 斜率优化Dp
题目描述 你有一支由nnn名预备役士兵组成的部队,士兵从1到nnn编号,要将他们拆分成若干特别行动队调入战场.出于默契考虑,同一支特别行动队中队员的编号应该连续,即为形如(i,i+1,...,i+k) ...
- bzoj1911 [Apio2010]特别行动队
Description 你有一支由 n 名预备役士兵组成的部队,士兵从 1 到 n 编号,要将他们拆分 成若干特别行动队调入战场.出于默契的考虑,同一支特别行动队中队员的编号 应该连续,即为形如(i, ...
- [BZOJ1911] [Apio2010]特别行动队
传送门 http://www.lydsy.com/JudgeOnline/problem.php?id=1911 题目大意 把连续的人分组,每组[j,k]的价值为a(∑ki=jx[i])2+b∑ki= ...
- 特别行动队[斜率优化]
传送门 首先考虑暴力的DP sum(i--j) 可以用前缀和维护 把式子拆开 ...是一坨常数,这里省略了 我们令 y=f[j]+a*s[j]*s[j]-b*s[j] , x=s[j] , k ...
最新文章
- html动态报警图片,报警记录.html
- erdas2015几何校正模块在哪_erdas图像几何校正操作步骤指南
- JQuery中样式标签的处理
- rpm mysql 忘记密码_mysql密码忘记该怎么办?
- SpringBoot登录拦截器
- 6.字符串截取数据求平均分
- Atitit.为什么小公司也要做高大上开源项目
- 计算机毕设 SpringBoot+Vue旧物置换系统 旧物交易管理系统 旧物二手交易系统Java Vue MySQL数据库 远程调试 代码讲解
- php微信公众号过滤微信qq表情
- 刨根问底 | 红遍全网的SD-WAN,到底是个啥?
- 使用plsql导出数据库表中数据
- Vue2学习笔记1 - win10下安装vue开发环境
- Excel 日期相减 DATEDIF 函数用法实例
- android如何拨打电话
- 俄罗斯套娃信封问题 转https://www.jianshu.com/p/9d9495ef4372
- java语言的三个版本是_Java是一个全面且功能强大的语言,可用于多种用途。Java有三个版本分别是:_学小易找答案...
- 广告流量反作弊风控中的模型应用
- DTU是什么及其用途
- flutter坑奇遇记
- linux线程 ppt,Linux多线程编程多核编程.ppt
热门文章
- markdown数学公式手册
- FCGF论文阅读笔记
- 【论文学习】Fast End-to-End Trainable Guided Filter
- python发动机曲轴连杆动力学计算
- CSU 1573 最多的数字
- 从JVM的角度看JAVA代码--代码优化
- 【基础】【后台】 微信小程序 - 腾讯云 - wafer2 - PHP - DEMO - 003 - 源码分析 - 02 - 路由
- 分子动力学模拟软件_分子模拟软件Discovery Studio教程(十三):构建PLS模型(3D-QSAR)...
- mysql插10万条数据_如何快速安全的插入千万条数据?
- 终端母体服务器是心识,自我意识的觉醒与重返母体的归属.doc