裸题,注意队列下标不要写错 Code: #include<cstdio> #include<algorithm> #include<cmath> using namespace std; const int maxn = 2000000 + 3; long long f[maxn], sum[maxn], a, b, c; int n, q[maxn]; inline double re_x(int i){ return sum[i]; }; inline double…
洛谷题目传送门 安利蒟蒻斜率优化总结 由于人是每次都是连续一段一段地选,所以考虑直接对\(x\)记前缀和,设现在的\(x_i=\)原来的\(\sum\limits_{j=1}^ix_i\). 设\(f_i\)为安排前\(i\)个人的最大值\((f_0=0)\) \(f_i=\max\limits_{j=0}^{i-1}\{f_j+a(x_i-x_j)^2+b(x_i-x_j)+c\}\) \(\quad=\max\limits_{j=0}^{i-1}\{f_j-2ax_ix_j+ax_j^2-b…
洛谷题目链接:[APIO2010]特别行动队 题目描述 你有一支由 n 名预备役士兵组成的部队,士兵从 1 到 \(n\) 编号,要将他们拆分 成若干特别行动队调入战场.出于默契的考虑,同一支特别行动队中队员的编号 应该连续,即为形如 \((i, i + 1, ..., i + k)\) 的序列. 编号为 \(i\) 的士兵的初始战斗力为 \(x_i\) ,一支特别行动队的初始战斗力 \(x\) 为队内 士兵初始战斗力之和,即 \(x = x_i + x_{i+1} + ... + x_{i+k…
题意简述 将n个士兵分为若干组,每组连续,编号为i的士兵战斗力为xi 若i~j士兵为一组,该组初始战斗力为\( s = \sum\limits_{k = i}^{j}xk \),实际战斗力\(a * s^2 + b * s + c\)(a,b,c为常数) 求最大实际战斗力 题解思路 \( dp[i] = max(dp[j) + a * (s[i] - s[j]) ^ 2 + b * (s[i] - s[j]) + c \) 然后斜率优化,单调队列维护 代码 #include <cstdio>…
传送门 先写出转移方程$$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…
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的决策…
[APIO2010]特别行动队 题面很直白,就不放了. 太套路了,做起来没点感觉了. \(dp(i)=dp(j)+a*(s(i)-s(j))^{2}+b*(s(i)-s(j))+c\) 直接推出一个斜率优化的式子上单调队列就好了 时间/空间复杂度:\(O(n)\) #include<cstdio> #define sid 1000500 #define ri register int #define ll long long #define dd double using namespace…
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>…
做完此题之后 自己应该算是真正理解了斜率优化DP 根据状态转移方程$f[i]=max(f[j]+ax^2+bx+c),x=sum[i]-sum[j]$ 可以变形为 $f[i]=max((a*sum[j]^2-b*sum[j])-(2a*sum[j]*sum[i]))+(a*sum[i]^2+b*sum[i]+c)$ 我们可以把每个决策映射到平面上的一个点 其中坐标$x=(a*sum[j]^2-b*sum[j])$代表此决策的固定价值(与转移到哪无关) 坐标$y=(-2a*sum[j])$代表此决…