[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 ...
随机推荐
- php-fpm.conf配置说明(重点要改动和优化的地方)
<?xml version="1.0" ?> <configuration> All relative paths in this config are r ...
- C#报错"线程间操作无效: 从不是创建控件“XXX”的线程访问它"--解决示例
C# Winform程序中,使用线程对界面进行更新需要特殊处理,否则会出现异常“线程间操作无效: 从不是创建控件“taskView”的线程访问它.” 在网文“http://www.cnblogs.co ...
- 怎样使用Entityframework.Extended
这个插件真的非常有用,我们能够使用下面语法来简化我们的工作,下面不过演示样例: Deleting <strong>//delete all users where FirstName ma ...
- java实验8-Java输入输出流
1 读写文件 [实验目的] (1)掌握文本文件的读写方法. (2)掌握随机文件的读写方法. (3)掌握InputStream.OutputStream抽象类的基本使用. (4)掌握FileInputS ...
- MySQL命令学习(一)
今天我们来学习一下MySQL中的经常使用命令(MySQL中的命令keyword是不区分大写和小写的): (1)show databases; 显示MySQL中的全部database (2)create ...
- ssm 网页
http://stackoverflow.com/questions/14545872/bean-named-xxx-must-be-of-typexxx-but-was-actually-of-ty ...
- VMware安装ubuntu学习笔记(只是笔记)
VMware安装ubuntu开机黑屏/死机 1- Edit Ubuntu VM Configuration file (.vmx) 2- Add the following line cpuid.1. ...
- SharePoint ULS Log Viewer 日志查看器
SharePoint ULS Log Viewer 日志查看器 项目描写叙述 这是一个Windows应用程序,更加轻松方便查看SharePoint ULS日志文件.支持筛选和简单的视图. 信息 这是一 ...
- C语言的面向对象设计之 X264,FFMPEG 架构探讨
FFMPEG架构分析 使用面向对象的办法来设想这样一个编解码库,首先让人想到的是构造各种编解码器的类,然后对于它们的抽象基类确定运行数据流的规则,根据算法转换输入输出对象. 在实际的代码,将这些编解码 ...
- eclipse中run as无run as server选项的解决方案
在项目->右击->Properties->Project Facets->Modify Project,选择Java和DynamicWeb Module