題目描述
因為是從別人部落格裡斜率優化分類一欄找的題目,所以…這題被我秒了。
顯然先預處理字首和s(
i)=∑
ik=1
xi 設
d(i)
為將前i 個士兵分組的最大修正後戰鬥力。 d(
i)==
=max
maxm
ax+a
×s(i
)2+b
×s(i
)+c設
kixj
biyj
====
2a×s
(i)s
(j)d
(i)−
a×s(
i)2−
b×s(
i)−c
d(j)
+a×s
(j)2
−b×s
(j)
直線解析式為ki
xj+b
i=yj
其中斜率ki
單減,xj
單增。
**
#include
#include
#include
#define k(a) (2*a*s[a])
#define x(a) s[a]
#define b(a) (d[a]-a*s[a]*s[a]-b*s[a]-c)
#define y(a) (d[a]+a*s[a]*s[a]-b*s[a])
using
namespace
std;
const
int maxn=1000010;
long
long d[maxn],s[maxn];
int q[maxn],n,a,b,c;
double slope(int i,int j)
int main()
int head=0,tail=0;
for(int i=1;i<=n;i++)
cout
<
}
BZOJ1911 Apio2010 特別行動隊
有n個人,每個人都有乙個戰力值,將這n個人分成若干個段 每個段內的人的編號都是連續的 每個段的初始戰力值為每個段內的人的戰力值的總和 給出常數a,b,c,而每個段的真正戰力值為ax2 bx c x為這個段的初始戰力值 求出分成若干個段得到的所有段的最大真正戰力值總和 dp很容易想到 設f i 為將前...
bzoj1911 Apio2010 特別行動隊
題目鏈結 給出乙個序列,將序列分成連續的幾段,每段的價值為a s s b s c,其中a,b,c為給定常數,s為這一段中所有數之和。求最大價值和。斜率優化。dp方程 其中 為字首和,表示從1 i的最大價值。斜率式 所以決策 對映到平面直角座標系上就是 斜率 為正且單增 橫座標 單減 小於0,單增 所...
bzoj 1911斜率優化
這個題為什麼有個 關於斜率優化又有了新的感悟 對於次優解的排除 假設對於i來說l是次優解。即滿足k q l q l 1 k i 時,l 1比l更優 k q l q l 1 表示這兩個點連成一條線的斜率,k i 表示在i處那根線的斜率,這個很容易就可以證明 對於提前排除不可能的解 假設r是考慮排除的點...