【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
裸的斜率优化。
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<cmath>
#include<iostream>
#include<algorithm>
#include<queue>
using namespace std; typedef long long LL;
const int N=;
LL n,a,b,c,s[N],f[N],Q[N]; // f[i]=a[i]*x[j]+b[j]
// a[i]=-2*a*s[i]
// x[j]=s[j]
// b[j]=f[j]+a*s[j]*s[j]-b*s[j]
// t[i]=a*s[i]*s[i]+b*s[i]+c double X(LL i){return s[i];}
double Y(LL i){return f[i]+a*s[i]*s[i]-b*s[i];}
double find_k(LL i,LL j){return (Y(i)-Y(j))/(X(i)-X(j));} int main()
{
// freopen("a.in","r",stdin);
freopen("commando.in","r",stdin);
freopen("commando.out","w",stdout);
scanf("%lld",&n);
scanf("%lld%lld%lld",&a,&b,&c);
s[]=;
for(int i=;i<=n;i++)
{
LL x;
scanf("%lld",&x);
s[i]=s[i-]+x;
}
f[]=;Q[]=;
LL l=,r=,ai,j,xj,bj,ti;
for(int i=;i<=n;i++)
{
ai=(-)*a*s[i];
while(l<r && find_k(Q[l],Q[l+])>=(-ai)) l++;
j=Q[l];
xj=s[j];
bj=f[j]+a*s[j]*s[j]-b*s[j];
ti=a*s[i]*s[i]+b*s[i]+c;
f[i]=ai*xj+bj+ti;
while(l<r && find_k(Q[r],Q[r-])<find_k(i,Q[r])) r--;
Q[++r]=i;
// printf("f %d = %d\n",i,f[i]);
}
printf("%lld\n",f[n]);
return ;
}
【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),以免出现精度问题. ...
- [Bzoj1911][Apio2010]特别行动队(斜率优化)
题目链接 斜率优化的经典模型,将序列分成若干段,每段有一个权值计算方法,求权值和最大/小 暴力的dp $O(n^{2})$ dp[i]为1-i的序列的最优解.sum[i]为前缀和,$D(i)=ax^{ ...
- [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 ...
随机推荐
- Python的异常
一.异常的常用形式 异常即是一个事件,该事件会在程序执行过程中发生,影响了程序的正常执行.一般情况下,在Python无法正常处理程序时就会发生一个异常.异常是Python对象,表示一个错误.当Pyth ...
- mac 安装php redis扩展
git clone git://github.com/nicolasff/phpredis.git cd ./phpredis phpize 如果报 Cannot find autoconf. Ple ...
- Sublime text3最全快捷键清单
[转]https://blog.csdn.net/mrchengzp/article/details/78508509,感谢作者的分享,收录方便查阅 Sublime Text 支持多种编程语言的语 ...
- 08-Mysql数据库----完整性约束
总结: 1,not null 不能插入空,不设置可空 2,unique 单列唯一 create table department(name char(10) unique); ...
- Spring实战第五章学习笔记————构建Spring Web应用程序
Spring实战第五章学习笔记----构建Spring Web应用程序 Spring MVC基于模型-视图-控制器(Model-View-Controller)模式实现,它能够构建像Spring框架那 ...
- Gym101981I Magic Potion(最大流)
Problem I. Magic Potion There are n heroes and m monsters living in an island. The monsters became v ...
- Eureka搭建
Eureka搭建 一.Eureka基本框架搭建 pom.xml文件配置:主要是引入Eureka所依赖的jar包 <?xml version="1.0" encoding=&q ...
- NO10——各种欧几里得
int gcd(int n,int m)//n>m { //最大公约数 int r; while(m) { r = n%m; n = m; m = r; } return n; } int kg ...
- Jquery tmpl详解
Jquery tmpl是动态请求数据来更新页面非常常用的方法,比如博客评论的分页动态加载,微博的滚动加载和定时请求加载等. 这些情况下,动态请求返回的数据一般不是已拼好的 HTML 就是 JSON 或 ...
- Mininet实验 动态改变转发规则
介绍 拓扑如下: 在该环境下,假设H1 ping H4,初始的路由规则是S1-S2-S5,一秒后,路由转发规则变为S1-S3-S5,再过一秒,规则变为S1-S4-S5,然后再回到最初的转发规则S1-S ...