首页 > TAG信息列表 > 行动队
P3628 [APIO2010]特别行动队 单调队列优化dp
P3628 [APIO2010]特别行动队 链接 转移方程不难写出:设 \(f_i\) 表示把前 \(i\) 个士兵分成若干组的最优值。 那么转移就是: \[f_{i}=\max\limits_{0\le k\le i-1}\{f_k+a\times (sum_i-sum_k)^2+b\times (sum_i-sum_k)+c \} \]拆开后移项变成了: \[f_k+a\times sum_k^2-b\times sum_[APIO2010]特别行动队
嘟嘟嘟 这道题dp式特别好想: \[dp[i] = max_{j = 0} ^ {i - 1} (dp[j] + f(s[i] - s[j])) \] 其中\(f(x) = ax^ 2 + bx + c\),\(s[i] = \sum_{j = 1} ^ {i} x[j]\)。 但是\(O(n ^ 2)\)过不了,需要斜率优化。 勇敢的把项拆开得到 \[dp[i] = max(dp[j] - b * s[j] + a * s[j] ^ 2 -斜率优化
让我来拯救水火之中的人们 几何多好理解啊,为什么要用代数方法呢? 先看一道经典题特别行动队 可以列出转移方程 \[dp_i=\max \left\{ dp_j+a(sum_i-sum_j)^2+b(sum_i-sum_j)+c \right\} \]跟\(i\)有关的项当成常数,跟\(j\)有关的项当成变量。我们把右边式子写成\(i*j_1+j_2+c\)的形P3628 [APIO2010]特别行动队
令 \(f_i\) 表示前 \(i\) 个士兵组成特别行动队的最大修正战斗力之和。对 \(x\) 做一遍前缀和。 转移方程: \[f_i=\max\{f_j+a\times(x_i-x_j)^2+b\times(x_i-x_j)+c|j<i\} \]考虑两个决策 \(j,k(j<k)\),若 \(j\) 比 \(k\) 优: \[f_j+a\times(x_i-x_j)^2+b\times(x_i-x_j)+c>f_k+a\ti[APIO2010]特别行动队
解析 转移方程很容易推:\(f_i = \max(f_j + a * (s_i - s_j)^2 + b * (s_i - s_j) + c)\) 然后当 \(j>k\) 时,如果 \(j\) 更优 那么 \(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 + a * s_j^2 - b * s_j) - (fluogu P3628 [APIO2010]特别行动队 斜率优化dp
#include<map> #include<queue> #include<time.h> #include<limits.h> #include<cmath> #include<ostream> #include<iterator> #include<set> #include<stack> #include<cstdio> #include<cstring> #incl特别行动队
这题不像前面那样板子了,至少我不认为它是个板子。 推出的方程长这样子:f[j]+a*sum[j]^2-b*sum[j]=(2*a*sum[i])*sum[j]+f[i]-a*sum[i]^2-b*sum[i]-c 看一下数据范围,a恒为负,这时斜率2*a*sum[i]单调递减,同时我们要求截距的最大值。 此时维护上凸壳(斜率单调递减) 看代码: #include<bits[APIO 2010]特别行动队
Description 题库链接 给你一个长度为 \(n\) 的序列 \(x\),你可以把这份序列划分为任意多份。如果某一份的 \(x\) 的和为 \(X\),那么这一份的价值为 \(aX^2+bX+c\)。问你划分后得到的最大价值为多少。 \(1\leq n\leq 10^6,-5\leq a\leq -1,|b,c|\leq 10^7,1\leq x_i\leq 100\) SolutP3628 [APIO2010]特别行动队
思路:斜率优化\(DP\) 提交:\(1\)次 题解: 转移方程:\(f[i]=\max(f[j]+A*(s[i]-s[j])^2+B*(s[i]-s[j])+C) 写成可以斜率优化的式子:\)f[i]+As[j]^2-Bs[j]+C=2As[i]s[j]+f[i]-As[j]^2-B*s[i]$ 然后求\(f[i]\)最大值,于是维护上凸包;,横坐标单调增,斜率单调减,所以直接上单调队列即可。 #includ[luogu3628][bzoj1911][APIO2010]特别行动队【动态规划+斜率优化DP】
题目描述 给你一个数列,让你将这个数列分成若干段,使其每一段的和的\(a \times sum^2 + b \times sum + c\)的总和最大。 分析 算是一道斜率优化的入门题。 首先肯定是考虑\(O(n^2)\)的暴力DP。 定义状态\(f[i]\)表示最后一段的结尾是\(i\)的最大答案。 那么枚举j,得到转移方程为\(f[iAPIO2010 特别行动队
题目链接:戳我 DP方程:\(dp[i]=max(dp[i],dp[j]+a*(sum[i]-sum[j])^2+b*(sum[i]-sum[j])+c)\) 暴力还是可以过一些点的(不止20pts),甚至有人说他暴力水过去了。。。 我们现在考虑正解,正解还是斜率优化。维护一个上凸包qwqwq 设\(dp[i]\)表示到士兵i所能达到的最大战力,\(sum[i]\)表示前bzoj 1191 特别行动队
一道不错的斜率优化入门题,传送门:bzoj 1911 题目描述稍微有点不太清楚,先解释一下 将n个士兵分成几个连续的组,每一组的战斗力为f(y),其中:f(x)=ax2+bx+c(a,b,c题中已给),y为这一组中士兵战斗力之和,求这几个组的战斗力之和的最大值。 考虑dp,设dp[x]表示将前x个士兵分组后所得到的战斗力的最特别行动队-斜率优化
APIO2010特别行动队 令S为前缀和,那么n方DP: f[i]=max{f[i],f[j]+a*(S[i]-S[j])*(S[i]-S[j])+b*(S[i]-S[j])+c}; 展开,移项得到: f[j]+a*s[j]*s[j]=(2*a*s[i]+b)s[j]+f[i]- a*s[i]*s[i]-b*s[i]-c。 即以f[j]+a*s[j]*s[j]为y,s[j]为x的一次函数,用斜率优化。 因为斜率单调递减,所以维护一