笔记-[APIO2010]特别行动队

[APIO2010]特别行动队


\(f_i\) 表示将 \((j+1,j+2,\dots,i)\) 分为一组,已解决 \(i\) 之前的士兵的最小代价。

\(a<0\)。

\[\begin{split}
f_i=&\max\{f_j+aX^2+bX+c\}(j<i)\\
=&\max\{f_j+a\left(\sum_{h=j+1}^ix_h\right)^2+b\left(\sum_{h=j+1}^ix_h\right)+c\}\\
\end{split}
\]

设 \(s_i=\sum_{h=1}^i x_h\):

\[\begin{split}
f_i=&\max\{f_j+a\left(\sum_{h=j+1}^ix_h\right)^2+b\left(\sum_{h=j+1}^ix_h\right)+c\}\\
=&\max\{f_j+a(s_i-s_j)^2+b(s_i-s_j)+c\}\\
=&\max\{f_j+a(s_i^2-2s_is_j+s_j^2)+b(s_i-s_j)+c\}\\
=&\max\{f_j+as_i^2-2as_is_j+as_j^2+bs_i-bs_j+c\}\\
=&\max\{f_j-2as_is_j+as_j^2-bs_j\}+as_i^2+bs_i+c\\
\end{split}
\]

考虑 \(j=k\) 比 \(j=t\) 更优:

\[\begin{split}
f_k-2as_is_k+as_k^2-bs_k>&f_t-2as_is_t+as_t^2-bs_t\\
f_k-2as_is_k+as_k^2-bs_k>&f_t-2as_is_t+as_t^2-bs_t\\
(f_k+as_k^2-bs_k)-(f_t+as_t^2-bs_t)>&2as_is_k-2as_is_t\\
\frac{(f_k+as_k^2-bs_k)-(f_t+as_t^2-bs_t)}{s_k-s_t}>&2as_i\\
\end{split}
\]

搞定。


Code

#include <bits/stdc++.h>
using namespace std; //Start
#define re register
#define il inline
#define mk make_pair
#define pb push_back
#define db double
#define lng long long
#define fi first
#define se second
const int inf=0x3f3f3f3f;
const lng INF=0x3f3f3f3f3f3f3f3f; //Data
int n,a,b,c;
vector<int> x;
vector<lng> s,f; //DP
template<typename T> il T p2(re T x){return x*x;}
il db fx(re int x){return s[x];}
il db fy(re int x){return f[x]+p2(s[x])*a-s[x]*b;}
il db slope(re int k,re int t){return (fy(k)-fy(t))/(fx(k)-fx(t));}
il lng DP(){
re int l=1,r=0; re vector<int> q(n+7); q[++r]=0;
for(re int i=1;i<=n;i++){
while(l<r&&slope(q[l],q[l+1])>=s[i]*2*a) l++;
f[i]=f[q[l]]+p2(s[i]-s[q[l]])*a+(s[i]-s[q[l]])*b+c;
while(l<r&&slope(q[r-1],q[r])<=slope(q[r],i)) r--;
q[++r]=i;
}
return f[n];
} //Main
int main(){
scanf("%d%d%d%d",&n,&a,&b,&c);
x=vector<int>(n+7);
s=f=vector<lng>(n+7);
for(re int i=1;i<=n;i++)
scanf("%d",&x[i]),s[i]=s[i-1]+x[i];
printf("%lld\n",DP());
return 0;
}

\[\Huge\color{#ddd}{\texttt{---END---}}
\]

笔记-[APIO2010]特别行动队的更多相关文章

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

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

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

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

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

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

  4. BZOJ 1911: [Apio2010]特别行动队( dp + 斜率优化 )

    sum为战斗力的前缀和 dp(x) = max( dp(p)+A*(sumx-sump)2+B*(sumx-sump)+C )(0≤p<x) 然后斜率优化...懒得写下去了... ------- ...

  5. bzoj1911[Apio2010]特别行动队 斜率优化dp

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

  6. P3628 [APIO2010]特别行动队(斜率优化dp)

    P3628 [APIO2010]特别行动队 设$s[i]$为战斗力前缀和 显然我们可以列出方程 $f[i]=f[j]+a*(s[i]-s[j])^{2}+b*(s[i]-s[j])+c$ $f[i]= ...

  7. [luogu P3628] [APIO2010]特别行动队

    [luogu P3628] [APIO2010]特别行动队 题目描述 你有一支由 n 名预备役士兵组成的部队,士兵从 1 到 n 编号,要将他们拆分 成若干特别行动队调入战场.出于默契的考虑,同一支特 ...

  8. 【bzoj1911】[Apio2010]特别行动队

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

  9. [APIO2010]特别行动队 --- 斜率优化DP

    [APIO2010]特别行动队 题面很直白,就不放了. 太套路了,做起来没点感觉了. \(dp(i)=dp(j)+a*(s(i)-s(j))^{2}+b*(s(i)-s(j))+c\) 直接推出一个斜 ...

随机推荐

  1. 源码分析:ReentrantReadWriteLock之读写锁

    简介 ReentrantReadWriteLock 从字面意思可以看出,是和重入.读写有关系的锁,实际上 ReentrantReadWriteLock 确实也是支持可重入的读写锁,并且支持公平和非公平 ...

  2. Angualr 内置工具-SelectionModel

    SelectionModel: 被用来控制选中一个和多个item时候的逻辑.例如下拉菜单,复选框选中等,非常方便. 引入:import{SelectionModel}from'@angular/cdk ...

  3. 学习一下 Spring Security

    一.Spring Security 1.什么是 Spring Security? (1)基本认识 Spring Security 是基于 Spring 框架,用于解决 Web 应用安全性的 一种方案, ...

  4. Qt QPainter画个球啊

    Qt QPainter画个球啊 目录 Qt QPainter画个球啊 看效果 方法 代码 看效果 方法 使用绘图事件,绘制一个图形 使用定时事件,不停更新图形位置 代码 .h #pragma once ...

  5. jboss反序列化漏洞实战渗透笔记

    一.利用shodan,fofa或谷歌搜索关键字:8080/jmx-console/ 二.下载java反序列化终极测试工具进行验证漏洞 三.记住User Current Directory:  C:\j ...

  6. js前端读取文件内容

    方法1:原生 <input type="file" name="file" id="file" onchange="jsRe ...

  7. 听法国设计师大卫·维森特讲述他与CorelDRAW的渊源

    在这次采访中,我们采访了法国插画家兼平面设计师大卫·维森特(David Vicente),他的特殊风格与Old-School美学,尤其是疯狂摇滚派有着密切的联系.在他精心制作的插图中,充满了细节和强烈 ...

  8. 用OCR文字识别工具来审阅和处理PDF内容

    "工作的时候要同时打开好几个软件真的是太不方便了."很多公司白领都有这样的困扰.他们抱怨着进行文字识别过后又要打开文档编辑器来进行编辑.PDF是办公文档常用的格式, ABBYY F ...

  9. locust使用小技巧(v0.13.5)

    Windows下载: pip install locustio==0.13.5; 以下基于locust的0.13.5,写文章时时2019年,没想到2020年就大变样了 locust是基于python的 ...

  10. selenium元素定位检查

    自动化测试的重点就是定位元素,然而定位元素没办法一步一步运行调试检查,每次都需要从代码的开始运行,检查起来效率极低. 一直想找一个能检查唯一性工具或者方法.百度发现一篇文章https://blog.c ...