【题解】[APIO2010]特别行动队
题目大意:一段区间的贡献是\(ax^2+bx+c,x=\sum v\),求一个划分让总区间的价值最大。分段必须连续。
\(\text{Solution:}\)
设计\(dp[i]\)表示前\(i\)个人的最佳划分价值。那么有转移:
\]
显然\(n^2\)的\(dp.\)
搞一下柿子,令\(sum_i\)表示\([1,i]\)的和。
\]
\]
\]
\]
此时\(y=dp[j]+asum[j]^2-bsum[j],k=2asum[i],x=sum[j],b=dp[i]-c-bsum[i]-asum[i]^2\)最大化截距维护上凸壳即可。
#include<bits/stdc++.h>
using namespace std;
#define int long long
int n,A,B,C,sum[2000010],v[2000010];
int tail,head,q[2000010],dp[2000010];
int Y(int x){return dp[x]+A*sum[x]*sum[x]-B*sum[x];}
int X(int x){return sum[x];}
long double slope(int x,int y){return (long double)(Y(y)-Y(x))/(X(y)-X(x));}
int cost(int i,int j){return A*(sum[i]-sum[j])*(sum[i]-sum[j])+B*(sum[i]-sum[j])+C;}
signed main(){
/*
dp[j]+Asum[j]^2-Bsum[j]=2Asum[i]sum[j]+dp[i]-Asum[i]^2-Bsum[i]-C
y=dp[j]+Asum[j]^2-Bsum[j],k=2Asum[i],x=sum[j],b=dp[i]-Asum[i]^2-Bsum[i]-C
*/
scanf("%lld%lld%lld%lld",&n,&A,&B,&C);
for(int i=1;i<=n;++i)scanf("%lld",&v[i]),sum[i]=sum[i-1]+v[i];
head=tail=1;q[head]=0;
for(int i=1;i<=n;++i){
while(head<tail&&slope(q[head],q[head+1])>=2.0*A*sum[i])head++;
dp[i]=dp[q[head]]+cost(i,q[head]);
while(head<tail&&slope(q[tail-1],q[tail])<=slope(q[tail-1],i))tail--;
q[++tail]=i;
}
printf("%lld\n",dp[n]);
return 0;
}
值得一提的是,原本在写进队出队判断的时候带上等于是错的,后来发现是精度被卡了。所以尽量用\(\text{long double.}\)
【题解】[APIO2010]特别行动队的更多相关文章
- 题解-APIO2010 特别行动队
题目 洛谷 & bzoj 简要题意:给定一个长为\(n\)的序列\(\{s_i\}\)与常数\(a,b,c\),序列的一个连续子段\(s_i\)到\(s_j\)的贡献为\(at^2+bt+c\ ...
- 【bzoj1911】[Apio2010]特别行动队
1911: [Apio2010]特别行动队 Time Limit: 4 Sec Memory Limit: 64 MBSubmit: 4048 Solved: 1913[Submit][Statu ...
- [洛谷P3628] [APIO2010]特别行动队
洛谷题目链接:[APIO2010]特别行动队 题目描述 你有一支由 n 名预备役士兵组成的部队,士兵从 1 到 \(n\) 编号,要将他们拆分 成若干特别行动队调入战场.出于默契的考虑,同一支特别行动 ...
- BZOJ 1911: [Apio2010]特别行动队 [斜率优化DP]
1911: [Apio2010]特别行动队 Time Limit: 4 Sec Memory Limit: 64 MBSubmit: 4142 Solved: 1964[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 ...
- BZOJ 1911: [Apio2010]特别行动队( dp + 斜率优化 )
sum为战斗力的前缀和 dp(x) = max( dp(p)+A*(sumx-sump)2+B*(sumx-sump)+C )(0≤p<x) 然后斜率优化...懒得写下去了... ------- ...
- bzoj1911[Apio2010]特别行动队 斜率优化dp
1911: [Apio2010]特别行动队 Time Limit: 4 Sec Memory Limit: 64 MBSubmit: 5057 Solved: 2492[Submit][Statu ...
- 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]= ...
- [luogu P3628] [APIO2010]特别行动队
[luogu P3628] [APIO2010]特别行动队 题目描述 你有一支由 n 名预备役士兵组成的部队,士兵从 1 到 n 编号,要将他们拆分 成若干特别行动队调入战场.出于默契的考虑,同一支特 ...
随机推荐
- P4719 【模板】"动态 DP"&动态树分治
题目描述 给定一棵 n 个点的树,点带点权. 有 m 次操作,每次操作给定 x,y,表示修改点 x 的权值为 y. 你需要在每次操作之后求出这棵树的最大权独立集的权值大小. 输入格式 第一行有两个整数 ...
- spring中bean初始化执行顺序
常用的javabean的初始化方法为,构造方法,@PostConstruct,以及实现InitializingBean接口的afterPropertiesSet方法. note在构造方法执行时候,sp ...
- Jogl2.0 jogamp-all-platforms 在eclipse 中的配置
我的电脑在win8 64位系统,搞了好久,网上的方法都快试了个遍,官网的试了,都不行,目前成功了,希望可以帮助其他同学. 1.首先去这里http://jogamp.org/deployment/jog ...
- Tomcat源码分析(类加载与类加载器)
Tomcat的挑战 Tomcat上可以部署多个项目 Tomcat的一般部署,可以通过多种方式启动一个Tomcat部署多个项目,那么Tomcat在设计时会遇到什么挑战呢? Tomcat运行时需要加载哪些 ...
- vue 实现原理及简单示例实现
目录 相关html代码,用于被解析绑定数据 observer代码 Dep代码 Watcher 代码 Compile 代码 vue 简要构造函数 创建vue实例 结语 主要理解.实现如下方法: Obse ...
- python pyinstaller生成 Windows 可运行的 .exe 程序
1.安装 pip install pyinstaller 2.检查 pyinstaller --version 3.参数说明 pyinstaller -w -F python.py -i img.ic ...
- selenuim常用api
1.通过代码跳转到页面的方法:前提:已安装驱动,并加入到path下 安装ie驱动或火狐驱动的情况: 2.当链接跳转按钮在页面最上方时,用window.scrollTo(0,0);显示在页面最上方后,再 ...
- iOS面试关于http知识点basic-01-http
URL URL 的全称是 Uniform Resource Locator(统一资源定位符) 通过 1 个 URL,能找到互联网上唯一的 1 个资源 URL就是资源的地址.位置,互联网上的每个资源都有 ...
- CTF-Wechall-第三天上午
2020.09.11 奥力给,Wechall这平台不错哦,感觉是一个循序渐近的过程,可能是我是我这么排序的原因吧,hhhhh
- Linux 【Shell脚本经典案例】
Shell 简介 hell是linux的一外壳,它包在linux内核的外面,为用户和内核之间的交互提供了一个接口 当用户下达指令给操作系统的时候,实际上是把指令告诉shell,经过shell解释,处理 ...