[题目链接]

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] 特别行动队的更多相关文章

  1. BZOJ 1911 (APIO 2010) 特别行动队

    题目描述 你有一支由n名预备役士兵组成的部队,士兵从1到n编号,要将他们拆分成若干特别行动队调入战场.出于默契考虑,同一支特别行动队中队员的编号应该连续,即为形如(i,i+1,-,i+k)的序列. 编 ...

  2. APIO 2010 特别行动队 斜率优化DP

    Description 你有一支由 n 名预备役士兵组成的部队,士兵从 1 到 n 编号,要将他们拆分 成若干特别行动队调入战场.出于默契的考虑,同一支特别行动队中队员的编号 应该连续,即为形如 (i ...

  3. [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 ...

  4. BZOJ 1911: [Apio2010]特别行动队 [斜率优化DP]

    1911: [Apio2010]特别行动队 Time Limit: 4 Sec  Memory Limit: 64 MBSubmit: 4142  Solved: 1964[Submit][Statu ...

  5. 【BZOJ-1911】特别行动队 DP + 斜率优化

    1911: [Apio2010]特别行动队 Time Limit: 4 Sec  Memory Limit: 64 MBSubmit: 3478  Solved: 1586[Submit][Statu ...

  6. 【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 ...

  7. 【斜率DP】BZOJ 1911:特别行动队

    1911: [Apio2010]特别行动队 Time Limit: 4 Sec  Memory Limit: 64 MBSubmit: 3006  Solved: 1360[Submit][Statu ...

  8. 【BZOJ 1191】 [Apio2010]特别行动队 (斜率优化)

    dsy1911: [Apio2010]特别行动队 [题目描述] 有n个数,分成连续的若干段,每段的分数为a*x^2+b*x+c(a,b,c是给出的常数),其中x为该段的各个数的和.求如何分才能使得各个 ...

  9. bzoj 1911 [Apio2010]特别行动队(斜率优化+DP)

    1911: [Apio2010]特别行动队 Time Limit: 4 Sec  Memory Limit: 64 MBSubmit: 3191  Solved: 1450[Submit][Statu ...

随机推荐

  1. 系统网站架构(淘宝、京东)& 架构师能力

    来一张看上去是淘宝的架构的图: 参考地址:http://hellojava.info/?p=520 说几点我认可的地方: 架构需要掌握的点: 通信连接方式:大量的连接通常会有两种方式: 1. 大量cl ...

  2. Odoo POS

    Jeffery Q:913547235     Odoo 8 只支持 ean13条码 Barcode scanner相当于键盘,30ms 条码枪输出类型,QWERTY     pos配置       ...

  3. python(23)- 面向对象简单介绍

    面向概述 面向过程:根据业务逻辑从上到下写垒代码 面向过程的设计的核心是过程,过程即解决问题的步骤, 面向过程的设计就好比精心设计好一条流水线,考虑周全什么时候处理什么东西 优点:极大降低了程序的复杂 ...

  4. 服务器文档下载zip格式 SQL Server SQL分页查询 C#过滤html标签 EF 延时加载与死锁 在JS方法中返回多个值的三种方法(转载) IEnumerable,ICollection,IList接口问题 不吹不擂,你想要的Python面试都在这里了【315+道题】 基于mvc三层架构和ajax技术实现最简单的文件上传 事件管理

    服务器文档下载zip格式   刚好这次项目中遇到了这个东西,就来弄一下,挺简单的,但是前台调用的时候弄错了,浪费了大半天的时间,本人也是菜鸟一枚.开始吧.(MVC的) @using Rattan.Co ...

  5. 小贝_mysql select连接查询

    select连接查询 简要: 一.union联合查询 二.左右内连接 一.union联合查询 作用: 把2次或多次查询结果合并起来 具体: (表1查询结果) union (表2查询结果) 运行: 先算 ...

  6. XML(四)dom4j解析XML

    使用dom4j须要导入jar包 jar包下载地址:http://pan.baidu.com/s/1o65jWRw 将dom4j-1.6.1.jar包导入Eclipse book2.xml <?x ...

  7. Python实战之自己主动化评论

    Python实战之自己主动化评论 玩csdn博客一个多月了,渐渐发现了一些有意思的事,常常会有人用相同的评论到处刷.不知道是为了加没什么用的积分,还是纯粹为了表达楼主好人.那么问题来了,这种无聊的事情 ...

  8. java 连接mysql 和sql server2008代码

    这两天用java分别连接mysql和sql server2008代码.刚開始都是有错.如今找到了在 自己机器上成功连接的代码: 1. mysql Class.forName("com.mys ...

  9. linux cat命令(转载)

    来源:http://blog.sina.com.cn/s/blog_52f6ead0010127xm.html 1.cat 显示文件连接文件内容的工具: cat 是一个文本文件查看和连接工具. 查看一 ...

  10. HDU 5296 Annoying problem LCA+树状数组

    题解链接 Annoying problem Time Limit: 16000/8000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/O ...