sum为战斗力的前缀和 dp(x) = max( dp(p)+A*(sumx-sump)2+B*(sumx-sump)+C )(0≤p<x) 然后斜率优化...懒得写下去了... -------------------------------------------------------------------------------- #include<bits/stdc++.h>   using namespace std;   typedef long long ll;   co…
1911: [Apio2010]特别行动队 Time Limit: 4 Sec  Memory Limit: 64 MBSubmit: 3191  Solved: 1450[Submit][Status][Discuss] Description Input Output Sample Input 4 -1 10 -20 2 2 3 4 Sample Output 9 HINT Source [思路] 斜率优化. 设f[i]表示将前i个分组的最优值,则有转移方程式: f[i]=max{ f[j]…
仔细想想好像没学过斜率优化.. 很容易推出状态转移方程\( f[i]=max{f[j]+a(s[i]-s[j])^2+b(s[i]-s[j])+c} \) 然后考虑j的选取,如果选j优于选k,那么: \[ f[j]+a(s[i]-s[j])^2+b(s[i]-s[j])+c>f[k]+a(s[i]-s[k])^2+b(s[i]-s[k])+c \] \[ f[j]+as[i]^2+as[j]^2-2as[i]s[j]+bs[i]-bs[j]+c>f[k]+as[i]^2+as[k]^2-2as…
题目 传送门:QWQ 分析 用$ dp[i] $ 表示前 i 个人组成的战斗力之和 然后显然$ dp[i]=Max (  dp[j]+a*(sum[i]-sum[j])^2+b*(sum[i]-sum[j])+c ) $ 然后就是斜率优化dp的套路,设个k比j优........... 然后对最后得出的式子搞斜率优化(太长了懒得写) 代码 #include <bits/stdc++.h> using namespace std; ; typedef long long ll; ll dp[max…
链接 思路 斜率优化dp. 代码 #include<cstdio> #include<algorithm> #include<cstring> #include<iostream> #include<cmath> using namespace std; typedef long long LL; int n,L,R; LL A,B,C,s[],q[],f[]; inline int read() { ,f = ;char ch = getcha…
题意 题目链接 Sol 裸的斜率优化,注意推导过程中的符号问题. #include<bits/stdc++.h> #define Pair pair<int, int> #define MP(x, y) make_pair(x, y) #define fi first #define se second #define int long long #define LL long long #define Fin(x) {freopen(#x".in","…
1911: [Apio2010]特别行动队 Time Limit: 4 Sec  Memory Limit: 64 MBSubmit: 4142  Solved: 1964[Submit][Status][Discuss] Description Input Output Sample Input 4 -1 10 -20 2 2 3 4 Sample Output 9 HINT f[i]=max{f[j]+...} 随便一化就好了 (a*(s[k]*s[k]-s[j]*s[j])+f[k]-f[…
1911: [Apio2010]特别行动队 Time Limit: 4 Sec  Memory Limit: 64 MB Description Input Output Sample Input 4 -1 10 -20 2 2 3 4 Sample Output 9 HINT Source dp方程: 如果j>k且j比k更优 #include<map> #include<cmath> #include<queue> #include<cstdio>…
1911: [Apio2010]特别行动队 Time Limit: 4 Sec  Memory Limit: 64 MBSubmit: 3478  Solved: 1586[Submit][Status][Discuss] Description Input Output Sample Input 4 -1 10 -20 2 2 3 4 Sample Output 9 HINT Source Solution 题意非常明显,将n个数划分成多段区间,使得总价值最大,每段区间的价值为$powersu…
1911: [Apio2010]特别行动队 Time Limit: 4 Sec  Memory Limit: 64 MB Submit: 5005  Solved: 2455 [Submit][Status][Discuss] Description Input Output Sample Input 4 -1 10 -20 2 2 3 4 Sample Output 9 HINT 一定要好好纪念一下QAQ,本蒟蒻第一次自己推出斜率优化dp 有点模糊惹..将就一下[捂脸] #include<io…
dsy1911: [Apio2010]特别行动队 [题目描述] 有n个数,分成连续的若干段,每段的分数为a*x^2+b*x+c(a,b,c是给出的常数),其中x为该段的各个数的和.求如何分才能使得各个段的分数的总和最大. [输入格式]  第1行:1个整数N (1 <= N <= 1000000). 第2行:3个整数a,b,c(-5<=a<=-1,|b|<=10000000,|c|<=10000000 下来N个整数,每个数的范围为[1,100]. [输出格式]      …
P3628 [APIO2010]特别行动队 设$s[i]$为战斗力前缀和 显然我们可以列出方程 $f[i]=f[j]+a*(s[i]-s[j])^{2}+b*(s[i]-s[j])+c$ $f[i]=f[j]+a*s[i]^{2}+b*s[i]-(2*a*s[i]+b)*s[j]+a*s[j]^{2}+c$ $a*s[j]^{2}+f[j]=(2*a*s[i]+b)*s[j]+f[i]-a*s[i]^{2}-b*s[i]-c$ 又变成了喜闻乐见的$y=k*x+b$ $y=a*s[j]^{2}+f…
传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=1911 裸的斜率优化dp. #include <cstdio> const int maxn = 1000005; int n, a, b, c, s[maxn], head, tail; char ch; long long f[maxn]; struct point { long long x, y; int id; } que[maxn], tem; inline void read…
#include<cstdio> #include<iostream> #define M 1000009 #define ll long long using namespace std; int n,zhan[M],h,t; ll a,b,c,f[M],sum[M]; double pai(int a1,int a2) { double ss=(f[a1]-f[a2])/(1.0*a*(sum[a2]-sum[a1])); return ss-sum[a2]-sum[a1];…
传送门 斜率优化dp经典题. 题目中说的很清楚,设f[i]表示前i个数分配出的最大值. 那么有: f[i]=max(f[j]+A∗(sum[i]−sum[j])2+B∗(sum[i]−sum[j])+C)" role="presentation" style="position: relative;">f[i]=max(f[j]+A∗(sum[i]−sum[j])2+B∗(sum[i]−sum[j])+C)f[i]=max(f[j]+A∗(sum[i…
欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 UPD(2018-04-01):用Latex重打了公式…… 题意概括 把一个整数序列划分成任意连续的段,使得划分出来的每一段的价值和最大. 对于某一段,价值的计算公式为 $V=ax^2+bx+c$,其中 $x$ 为当前段的数值和. 题解 这题是博主大蒟蒻的第一道斜率优化DP题…… C++:while (1) 懵逼++; Pascal:while (true) do inc(懵逼); 本题首先一看就是 DP 题.…
Description Input Output Sample Input - - Sample Output HINT Solution 斜率优化动态规划 首先易得出这样的一个朴素状态转移方程 f[i]=max{f[j]+cal(sum[i]-sum[j])} 其中j<i,且cal(x)=a*x*x+b*x+c 那么设转移方程中的式子为V 若i<j,且V(j)>V(i) 那么,f[j]-f[i]+a*sum[j]^2-a*sum[i]^2+b*(sum[i]-sum[j])>2*…
题目链接 斜率优化总结待补,请催更.不催更不补 \[f[i]=f[j]+a*(sum[i]-sum[j])^2+b*(sum[i]-sum[j])+c\] \[=f[j]+a*sum[i]^2+a*sum[j]^2-2a*sum[i]*sum[j]+b*sum[i]-b*sum[j]+c\] \[f[j]+a*sum[j]^2-b*sum[j]+c=2a*sum[i]*sum[j]+f[i]-a*sum[i]^2-b*sum[i]\] #include <cstdio> #include &l…
传送门 先写出转移方程$$dp[i]=max\{dp[j]+a*(sum[i]-sum[j])^2+b*(sum[i]-sum[j])+c\}$$ 假设$j$比$k$更优,则有$$dp[j]+a*(sum[i]-sum[j])^2+b*(sum[i]-sum[j])+c>dp[k]+a*(sum[i]-sum[k])^2+b*(sum[i]-sum[k])+c$$ 展开,并消去同类项之后得$$dp[j]-2*a*sum[i]*sum[j]+a*sum[j]^2-b*sum[j]>dp[k]-2…
考虑最普通的\(dp\) \[dp[i]=max(dp[j]+a*(sum[i]-sum[j])^2+b*(sum[i]-sum[j])+c \] qwq 由于演算纸扔掉了 qwq 所以直接给出最后的柿子 设\(f[x]=dp[x]+a*sum[x]^2\) \[\frac{f[j]-f[k]}{s[j]-s[k]}>2*a*sum[i]+b \] 所以直接维护一个上凸壳就好了啦 #include<iostream> #include<cstdio> #include<…
$ BZOJ~1911~*~ $ 特别行动队: (斜率优化) $ solution: $ 感觉这道题目还是比较常规的,首先我们很容易想到DP,因为题目里面说了选出的人都是连续的,这意味着我们可以从前往后DP.我们直接设 \(f[i]\) 表示前 \(i\) 在分组之后的战斗力之和(因为题目没有明确要求分几组,所以我们省去这一维度).然后转移也比较常规,我们枚举前面的某一个人 \(k\) 作为这一组人的左端点(右端点就是第 \(i\) 个人).这题数据范围很大,我们也不用着急,现将式子列出来,如果…
[BZOJ1911][APIO2010]特别行动队 题面 Description 你有一支由 n 名预备役士兵组成的部队,士兵从 1 到 n 编号, 要将他们拆分成若干特别行动队调入战场.出于默契的考虑,同一支特别行动队中队员的编号应该连续,即为形如(i, i + 1, -, i + k)的序列. 编号为 i 的士兵的初始战斗力为 xi ,一支特别行动队的初始战斗力 x 为队内士兵初始战斗力之和,即 X = Xi + Xi+1 + - + Xi+k.通过长期的观察,你总结出一支特别行动队的初始战…
Time Limit: 4 Sec  Memory Limit: 64 MBSubmit: 5706  Solved: 2876[Submit][Status][Discuss] Description Input Output Sample Input 4 -1 10 -20 2 2 3 4 Sample Output 9 HINT 似乎逐渐掌握了斜率优化的规律,,, f[i]=max{f[j]+a*(sum[i]-sum[j])2+b*(sum[i]-sum[j]+c} 斜率优化,设k<j<…
1010: [HNOI2008]玩具装箱toy Time Limit: 1 Sec  Memory Limit: 162 MBSubmit: 9812  Solved: 3978[Submit][Status][Discuss] Description P教授要去看奥运,但是他舍不下他的玩具,于是他决定把所有的玩具运到北京.他使用自己的压缩器进行压缩,其可以将任意物品变成一堆,再放到一种特殊的一维容器中.P教授有编号为1...N的N件玩具,第i件玩具经过压缩后变成一维长度为Ci.为了方便整理,P…
既然每块都要买, 那么一块土地被另一块包含就可以不考虑. 先按长排序, 去掉不考虑的土地, 剩下的土地长x递增, 宽y递减 dp(v) = min{ dp(p)+xv*yp+1 } 假设dp(v)由i转移比由j转移优(i>j), 那么 dp(i)+xv*yi+1 < dp(j)+xv*yj+1 化简得 (dp(i) - dp(j))/(yi+1-yj+1) > -xv 然后就斜率优化, 单调队列维护一个下凸函数 --------------------------------------…
题目链接 斜率优化 不说了 网上很多 这的比较详细->Click Here or Here //1700kb 60ms #include<cstdio> #include<cctype> //#define gc() getchar() #define gc() (SS==TT&&(TT=(SS=IN)+fread(IN,1,MAXIN,stdin),SS==TT)?EOF:*SS++) typedef long long LL; const int N=5e…
[题目描述] 有n个数,分成连续的若干段,每段的分数为a*x^2+b*x+c(a,b,c是给出的常数),其中x为该段的各个数的和.求如何分才能使得各个段的分数的总和最大. [输入格式]  第1行:1个整数N (1 <= N <= 1000000). 第2行:3个整数a,b,c(-5<=a<=-1,|b|<=10000000,|c|<=10000000 下来N个整数,每个数的范围为[1,100]. [输出格式]      一个整数,各段分数总和的值最大. SAMPLE I…
题目:http://www.lydsy.com/JudgeOnline/problem.php?id=1911 分析: 首先可以的到裸的方程f[i]=max{f[j]+a*(Si-Sj)^2+b*(Si-Sj)+c} 0<j<i 简化一下方程,我们知道对于一次项,最后结果肯定是b*Sn 所以可以写成f[i]=max{f[j]+a*(Si-Sj)^2+c} 0<j<i 我们不妨设0<x<y<i,且x比y优 即f[x]+a*(Si-Sx)^2+c>f[y]+a*…
题目链接 设c[i]是战斗力前缀和,f[i]是考虑前i个,且最后一组分到第i个士兵为止的战斗力之和 则有朴素状态转移方程 ;i<=n;++i) ;j<i;++j){ int x=c[i]-c[j]; f[i]=min(f[i],a*x*x+b*x+c); } 然后考虑优化. 假设f[i]最优结果是从f[j]转移过来,同时有一个不那么优的转移f[k] 则有$f[j]+a*squa(c[i]-c[j])+b*(c[i]-c[j])+c>f[k]+a*squa(c[i]-c[k])+b*(c[…
1911: [Apio2010]特别行动队 Time Limit: 4 Sec  Memory Limit: 64 MBSubmit: 5057  Solved: 2492[Submit][Status][Discuss] Description Input Output Sample Input 4 -1 10 -20 2 2 3 4 Sample Output 9 HINT dp[i]=dp[j]+a*x*x+b*x+cx=sum[i]-sum[j] 证明单调性假设对于i点 k<j且j的决策…