[bzoj1911][Apio2010]特别行动队
Description
有个元素
,可以将
个元素分成多组,每组的元素编号必须是连续的.
设每组的为
,则每组的价值公式为
.
求最大价值和.
Input
输入由三行组成。
第一行包含一个整数,表示士兵的总数.
第二行包含三个整数,价值公式中各项的系数.
第三行包含个用空格分隔的整数
.
Output
输出一个整数,表示最大价值和。
Sample Input
4
-1 10 -20
2 2 3 4
Sample Output
9
HINT
Solution
表示前
个的最大价值和,
.
这样是的,显然过不了,所以考虑斜率优化.
当且
时,
尽量将分离:
设,
则,
.
的前提条件是
.
整理得,.
令 ,
则队列中的元素满足
(若存在,因为
是递增的,所以
比
优,即
可以删去),
所以每次取元素时,将满足的
出队(因为
比
优),然后取队首为
.
#include<set>
#include<cmath>
#include<ctime>
#include<queue>
#include<stack>
#include<cstdio>
#include<vector>
#include<cstring>
#include<cstdlib>
#include<iostream>
#include<algorithm>
#define N 1000001
using namespace std;
typedef long long ll;
ll f[N],s[N],q[N],a,b,c,n,h,t;
inline ll sqr(ll k){
return k*k;
}
inline ll y(ll k){
return a*sqr(s[k])+b*s[k]+c;
}
inline ll g(ll k){
return f[k]+a*sqr(s[k])-b*s[k];
}
inline ll func(ll k){
return a*sqr(k)+b*k+c;
}
inline double cmp(ll p,ll q){
return (double)(g(q)-g(p))/(double)(s[q]-s[p]);
}
inline void init(){
scanf("%lld%lld%lld%lld",&n,&a,&b,&c);
for(ll i=1;i<=n;i++){
scanf("%lld",&s[i]);
s[i]+=s[i-1];
}
for(ll i=1,k;i<=n;i++){
k=(a<<1)*s[i];
while(h<t&&cmp(q[h],q[h+1])>k) h++;
f[i]=f[q[h]]+func(s[i]-s[q[h]]);
while(h<t&&cmp(q[t],i)>cmp(q[t-1],q[t]))
t--;
q[++t]=i;
}
printf("%lld\n",f[n]);
}
int main(){
freopen("commando.in","r",stdin);
freopen("commando.out","w",stdout);
init();
fclose(stdin);
fclose(stdout);
return 0;
}
[bzoj1911][Apio2010]特别行动队的更多相关文章
- bzoj1911[Apio2010]特别行动队 斜率优化dp
1911: [Apio2010]特别行动队 Time Limit: 4 Sec Memory Limit: 64 MBSubmit: 5057 Solved: 2492[Submit][Statu ...
- BZOJ1911 [Apio2010]特别行动队 【斜率优化】
1911: [Apio2010]特别行动队 Time Limit: 4 Sec Memory Limit: 64 MB Submit: 5005 Solved: 2455 [Submit][Sta ...
- BZOJ1911 [Apio2010]特别行动队 - 动态规划 - 斜率优化
欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 UPD(2018-04-01):用Latex重打了公式…… 题意概括 把一个整数序列划分成任意连续的段,使得划分出 ...
- 【题解】 bzoj1911: [Apio2010]特别行动队 (动态规划+斜率优化)
bzoj1911,懒得复制,戳我戳我 Solution: 线性DP(打牌) \(dp\)方程还是很好想的:\(dp[i]=dp[j-1]+a*(s[i]-s[j-1])^2+b*(s[i]-s[j-1 ...
- [bzoj1911][Apio2010特别行动队] (动态规划+斜率优化)
Description Input Output Sample Input - - Sample Output HINT Solution 斜率优化动态规划 首先易得出这样的一个朴素状态转移方程 f[ ...
- [luogu3628][bzoj1911][APIO2010]特别行动队【动态规划+斜率优化DP】
题目描述 给你一个数列,让你将这个数列分成若干段,使其每一段的和的\(a \times sum^2 + b \times sum + c\)的总和最大. 分析 算是一道斜率优化的入门题. 首先肯定是考 ...
- bzoj1911 [Apio2010]特别行动队commando
题目链接 斜率优化 #include<cstdio> #include<cstdlib> #include<string> #include<cstring& ...
- 2018.09.07 bzoj1911: [Apio2010]特别行动队(斜率优化dp)
传送门 斜率优化dp经典题. 题目中说的很清楚,设f[i]表示前i个数分配出的最大值. 那么有: f[i]=max(f[j]+A∗(sum[i]−sum[j])2+B∗(sum[i]−sum[j])+ ...
- BZOJ1911: [Apio2010]特别行动队(dp 斜率优化)
题意 题目链接 Sol 裸的斜率优化,注意推导过程中的符号问题. #include<bits/stdc++.h> #define Pair pair<int, int> #de ...
随机推荐
- nodeType的12种类型
// NodeType const unsigned short ELEMENT_NODE = 1; 元素节点 const unsigned short ATTRIBUTE_NODE = 2; 属性节 ...
- Mysql占用过高CPU时的优化手段
Mysql占用CPU过高的时候,该从哪些方面下手进行优化?占用CPU过高,可以做如下考虑:1)一般来讲,排除高并发的因素,还是要找到导致你CPU过高的哪几条在执行的SQL,show processli ...
- Markdown:认识&入门
来源:http://sspai.com/25137 一.认识 Markdown 在刚才的导语里提到,Markdown 是一种用来写作的轻量级「标记语言」,它用简洁的语法代替排版,而不像一般我们用的字处 ...
- 窗口 - dialog - 概述与基本使用
什么是dialog 对话框是一种特殊的窗口,它在顶部有一个工具栏,在底部有一个按钮栏.默认情况下,对话框(dialog)只有一个显示在头部右侧的关闭工具. 用户可以配置对话框行为来显示其他工具(比如: ...
- js profiler
https://developers.google.com/web/fundamentals/performance/critical-rendering-path/?hl=en https://de ...
- [转]WampServer localhost 图标不显示解决办法
FROM : http://blog.warmcolor.net/2011/11/03/wampserver-localhost-%E5%9B%BE%E6%A0%87%E4%B8%8D%E6%98%B ...
- [转]终于找到全annotation配置springMVC的方法了(事务不失效)
原文:http://icanfly.iteye.com/blog/778401 icanfly 写道 如果带上事务,那么用annotation方式的事务注解和bean配置,事务会失效,要将servic ...
- 我使用celery以及docker部署遇到的问题
首先我本机测试时没有问题的,但是在线上docker中,任务一直显示 "Sending due task".超时的任务是 django orm update 操作,本地不会出现这样的 ...
- npm中package.json详解
通常我们使用npm init命令来创建一个npm程序时,会自动生成一个package.json文件.package.json文件会描述这个NPM包的所有相关信息,包括作者.简介.包依赖.构建等信息,格 ...
- github上最全的资源教程-前端涉及的所有知识体系
前面分享了前端入门资源汇总,今天分享下前端所有的知识体系. 个人站长对个人综合素质要求还是比较高的,要想打造多拉斯自媒体网站,不花点心血是很难成功的,学习前端是必不可少的一个环节, 当然你不一定要成为 ...