Link

题目大意:一段区间的贡献是\(ax^2+bx+c,x=\sum v\),求一个划分让总区间的价值最大。分段必须连续。

\(\text{Solution:}\)

设计\(dp[i]\)表示前\(i\)个人的最佳划分价值。那么有转移:

\[dp[i]=\max_{j<i}dp[j]+a(\sum_{j+1\to i}v)^2+b(\sum_{j+1\to i}v)+c
\]

显然\(n^2\)的\(dp.\)

搞一下柿子,令\(sum_i\)表示\([1,i]\)的和。

\[dp[i]=dp[j]+a(sum[i]-sum[j])^2+b(sum[i]-sum[j])+c
\]
\[dp[i]=dp[j]+a(sum[i]^2+sum[j]^2-2sum[i]sum[j])+bsum[i]-bsum[j]+c
\]
\[dp[i]=dp[j]+asum[i]^2+asum[j]^2-2asum[i]sum[j]+bsum[i]-bsum[j]+c
\]
\[dp[j]+asum[j]^2-bsum[j]=2asum[i]sum[j]+dp[i]-c-bsum[i]-asum[i]^2
\]

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

  1. 题解-APIO2010 特别行动队

    题目 洛谷 & bzoj 简要题意:给定一个长为\(n\)的序列\(\{s_i\}\)与常数\(a,b,c\),序列的一个连续子段\(s_i\)到\(s_j\)的贡献为\(at^2+bt+c\ ...

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

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

  3. [洛谷P3628] [APIO2010]特别行动队

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

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

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

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

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

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

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

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

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

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

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

  9. 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]= ...

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

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

随机推荐

  1. JS深浅拷贝及其实现

    基本数据类型和引用数据类型 JS数据分为基本数据类型和引用数据类型.基本数据类型的变量存储在栈中,引用数据类型则存储在堆中,引用数据类型的存储地址则保存在栈中. 下面来看一个小例子 // 基本数据类型 ...

  2. P3419 [POI2005]SAM-Toy Cars

    Description ​ Jasio 是一个三岁的小男孩,他最喜欢玩玩具了,他有n 个不同的玩具,它们都被放在了很高的架子上所以Jasio 拿不到它们. 为了让他的房间有足够的空间,在任何时刻地板上 ...

  3. C#转PHP

    官方主页 https://github.com/isukces/cs2php 快速开始 http://www.cs2php.com/how-to-begin.htm#.W2rBhC2B3mI 如何在V ...

  4. react-native 常用命令

    创建项目 react-native init AwesomeProject //AwesomeProject是项目名 启动 Node.js web server react-native start ...

  5. TDengine能比Hadoop快10倍?

    之前对国产的时序大数据存储引擎 TDengine 感兴趣,因为号称比Hadoop快十倍,一直很好奇怎么实现的,所以最近抽空看了下白皮书和设计文档. 如果用一句话总结,就是 TDengine 是为特定的 ...

  6. Infinite Inversions(树状数组+离散化)

    思路及代码参考:https://blog.csdn.net/u014800748/article/details/45420085 There is an infinite sequence cons ...

  7. 面试【JAVA基础】阻塞队列

    1.五种阻塞队列介绍 ArrayBlockingQueue 有界队列,底层使用数组实现,并发控制使用ReentrantLock控制,不管是插入操作还是读取操作,都需要获取锁之后才能执行. Linked ...

  8. 小程序开发-Canvas画布组件

    Canvas画布 基本使用方法: 在wxml中添加canvas组件 <canvas canvas-id='canvasDemo' class='demo'></canvas> ...

  9. 08_线程间通信 ITC

    1.线程间的通信方式 1.共享全局变量 2.线程队列(queue) 3.信号量(Semaphore) 2.共享全局变量进行通信 from threading import Thread import ...

  10. ZT:做一个连自己都羡慕的人

    当你越来越杰出时,自然有人关注你, 当你越来越有能力时,自然会有人看得起你, 改变自己,你才有自信,梦想才会慢慢的实现. 做最好的自己,懒可以毁掉一个人,勤可以激发一个人! 不要等夕阳西下的时候才对自 ...