[APIO 2010] 特别行动队
[题目链接]
https://www.lydsy.com/JudgeOnline/problem.php?id=1911
[算法]
设前i个士兵"修正"后的最大战斗力为fi
令sumi表示x的前缀和
显然 , 有状态转移方程 : fi = max{ fj + a * (sumi - sumj) ^ 2 + b * (sumi - sumj) + c }
对该式进行化简 , 得 :
fi = max{ fj + asumi ^ 2 + asumj ^ 2 - 2asumisumj + bsumi - bsumj + c}
令Yj = fj + asumj ^ 2 , Xj = sumj
则 : fi = max{Yj - Xj(2sumi + b) + aumi ^ 2 + bsumi + c}
那么Yj = Xj + (2asumi + b) + fi - asumi ^ 2 - bsumi - c
显然我们要做的是最大化截距
2asumi + b单调递减 , Xi单调递增 , 维护一个上凸壳即可
时间复杂度 : O(N)
[代码]
#include<bits/stdc++.h>
using namespace std;
const int N = ;
typedef long long ll;
typedef long double ld;
typedef unsigned long long ull; int n , l , r;
ll a , b , c;
int q[N];
ll f[N] , sum[N] , X[N] , Y[N]; template <typename T> inline void chkmax(T &x , T y) { x = max(x , y); }
template <typename T> inline void chkmin(T &x , T y) { x = min(x , y); }
template <typename T> inline void read(T &x)
{
T f = ; x = ;
char c = getchar();
for (; !isdigit(c); c = getchar()) if (c == '-') f = -f;
for (; isdigit(c); c = getchar()) x = (x << ) + (x << ) + c - '';
x *= f;
} int main()
{ read(n);
read(a); read(b); read(c);
for (int i = ; i <= n; i++)
{
int x;
read(x);
sum[i] = sum[i - ] + x;
X[i] = sum[i];
}
f[q[l = r = ] = ] = ;
for (int i = ; i <= n; i++)
{
while (l < r && Y[q[l + ]] - Y[q[l]] >= ( * a * sum[i] + b) * (X[q[l + ]] - X[q[l]])) ++l;
f[i] = Y[q[l]] - X[q[l]] * ( * a * sum[i] + b) + a * sum[i] * sum[i] + b * sum[i] + c;
Y[i] = f[i] + a * sum[i] * sum[i];
while (l < r && (Y[i] - Y[q[r]]) * (X[q[r]] - X[q[r - ]]) >= (Y[q[r]] - Y[q[r - ]]) * (X[i] - X[q[r]])) --r;
q[++r] = i;
}
printf("%lld\n" , f[n]); return ; }
[APIO 2010] 特别行动队的更多相关文章
- BZOJ 1911 (APIO 2010) 特别行动队
题目描述 你有一支由n名预备役士兵组成的部队,士兵从1到n编号,要将他们拆分成若干特别行动队调入战场.出于默契考虑,同一支特别行动队中队员的编号应该连续,即为形如(i,i+1,-,i+k)的序列. 编 ...
- APIO 2010 特别行动队 斜率优化DP
Description 你有一支由 n 名预备役士兵组成的部队,士兵从 1 到 n 编号,要将他们拆分 成若干特别行动队调入战场.出于默契的考虑,同一支特别行动队中队员的编号 应该连续,即为形如 (i ...
- [bzoj 1911][Apio 2010]特别行动队(斜率优化DP)
题目:http://www.lydsy.com/JudgeOnline/problem.php?id=1911 分析: 首先可以的到裸的方程f[i]=max{f[j]+a*(Si-Sj)^2+b*(S ...
- BZOJ 1911: [Apio2010]特别行动队 [斜率优化DP]
1911: [Apio2010]特别行动队 Time Limit: 4 Sec Memory Limit: 64 MBSubmit: 4142 Solved: 1964[Submit][Statu ...
- 【BZOJ-1911】特别行动队 DP + 斜率优化
1911: [Apio2010]特别行动队 Time Limit: 4 Sec Memory Limit: 64 MBSubmit: 3478 Solved: 1586[Submit][Statu ...
- 【BZOJ】【1911】【APIO2010】特别行动队commando
DP/斜率优化 嗯……第三道斜率优化的题目了. 定义 $s[i]=\sum_{k=1}^{i} x[k] $ 方程:$f[i]=max\{ f[j]+a*(s[i]-s[j])^2+b*(s[i]-s ...
- 【斜率DP】BZOJ 1911:特别行动队
1911: [Apio2010]特别行动队 Time Limit: 4 Sec Memory Limit: 64 MBSubmit: 3006 Solved: 1360[Submit][Statu ...
- 【BZOJ 1191】 [Apio2010]特别行动队 (斜率优化)
dsy1911: [Apio2010]特别行动队 [题目描述] 有n个数,分成连续的若干段,每段的分数为a*x^2+b*x+c(a,b,c是给出的常数),其中x为该段的各个数的和.求如何分才能使得各个 ...
- bzoj 1911 [Apio2010]特别行动队(斜率优化+DP)
1911: [Apio2010]特别行动队 Time Limit: 4 Sec Memory Limit: 64 MBSubmit: 3191 Solved: 1450[Submit][Statu ...
随机推荐
- iOS开发 解决使用AVAudioRecorder录制后转mp3解决音量小的问题
使用AVAudioRecorder录音后使用avplayer播放声音小,录音完后转成mp3格式的音频声音也小!!! 老板要求最基本的是不用把手机放到耳边听! 在StackOverFlow上查了一下,加 ...
- java线程中Exchanger使用
有时我们须要对元素进行配对和交换线程的同步点,使用exchange方法 返回其伙伴的对象,这时我们就须要使用线程类中的Exchanger类了, 我通过一个实例 来简单说明一下他的用法及其作用: imp ...
- php性能监控扩展xhprof
XHProf是facebook开源出来的一个php轻量级的性能分析工具,跟Xdebug类似,但性能开销更低,还可以用在生产环境中,也可以由程序开 关来控制是否进行profile.总体来说是个不错的工具 ...
- makefile 与android.mk中加信息打印
makefile里面加打印: [table]@echo ' zImage - Compressed kernel image' android.mk里面加信息打印: $(warning TEXT... ...
- Odoo webinar
分享些 odoo9 webinar 视频 https://pan.baidu.com/s/1pLF5njt
- 浅谈MySQL外键
http://www.xiaoxiaozi.com/2009/07/12/1158/ 像MySQL这样的关系型数据库管理系统,它们的基础是在数据库的表之间创建关系的能力.通过方便地在不同表中建立记录到 ...
- bootstrap到底是用来做什么的(概念)
Bootstrap官网:http://v3.bootcss.com/ Bootstrap是Twitter推出的一个用于前端开发的开源工具包.它由Twitter的设计师Mark Otto和Jacob T ...
- VueJS处理逻辑指令:v-if
HTML <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <titl ...
- C#自定义类型数组排序
在数组或者集合中对自定义类型进行排序分为两种方法. 1.如果这个自定义类型是自己定义编写的,那么我可以使它继承ICompareable<T>接口,实现其中的CompareTo(Object ...
- HDU-3681-Prison Break(BFS+状压DP+二分)
Problem Description Rompire is a robot kingdom and a lot of robots live there peacefully. But one da ...