考虑前
k
k
k 项的方差。
s
2
=
1
k
∑
i
=
1
k
(
v
ˉ
−
v
i
)
2
s
=
1
k
(
∑
i
=
1
k
(
v
ˉ
2
+
v
i
2
−
2
v
ˉ
v
i
)
)
=
1
k
(
∑
i
=
1
k
v
ˉ
2
+
∑
i
=
1
k
v
i
2
−
∑
i
=
1
k
2
v
ˉ
v
i
)
)
=
1
k
(
k
v
ˉ
2
+
∑
i
=
1
k
v
i
2
−
2
v
ˉ
∑
i
=
1
k
v
i
)
)
=
v
ˉ
2
+
1
k
∑
i
=
1
k
v
i
2
−
2
k
v
ˉ
∑
i
=
1
k
v
i
=
1
k
2
(
∑
i
=
1
k
v
i
)
2
+
1
k
∑
i
=
1
k
v
i
2
−
2
k
v
ˉ
∑
i
=
1
k
v
i
=
1
k
2
(
∑
i
=
1
k
v
i
)
2
+
1
k
∑
i
=
1
k
v
i
2
−
2
k
2
(
∑
i
=
1
k
v
i
)
2
=
1
k
∑
i
=
1
k
v
i
2
−
1
k
2
(
∑
i
=
1
k
v
i
)
2
\begin{aligned} s^2&=\frac{1}{k}\sum_{i=1}^k(\bar{v}-v_i)^2s\\ &=\frac 1k\Big( \sum_{i=1}^k (\bar v^2+v_i^2-2\bar vv_i)\Big)\\ &=\frac 1k\Big( \sum_{i=1}^k \bar v^2+\sum_{i=1}^kv_i^2-\sum_{i=1}^k2\bar vv_i)\Big)\\ &=\frac 1k\Big( k\bar v^2+\sum_{i=1}^kv_i^2-2\bar v\sum_{i=1}^kv_i)\Big)\\ &=\bar v^2+\frac 1k\sum_{i=1}^kv_i^2-\frac 2k\bar v\sum_{i=1}^kv_i\\ &=\frac 1{k^2}\Big(\sum_{i=1}^k v_i\Big)^2+\frac 1k\sum_{i=1}^kv_i^2-\frac 2k\bar v\sum_{i=1}^kv_i\\ &=\frac 1{k^2}\Big(\sum_{i=1}^k v_i\Big)^2+\frac 1k\sum_{i=1}^kv_i^2-\frac 2{k^2}\Big(\sum_{i=1}^kv_i\Big)^2\\ &=\frac 1k\sum_{i=1}^kv_i^2-\frac 1{k^2}\Big(\sum_{i=1}^kv_i\Big)^2\\ \end{aligned}
s2=k1i=1∑k(vˉ−vi)2s=k1(i=1∑k(vˉ2+vi2−2vˉvi))=k1(i=1∑kvˉ2+i=1∑kvi2−i=1∑k2vˉvi))=k1(kvˉ2+i=1∑kvi2−2vˉi=1∑kvi))=vˉ2+k1i=1∑kvi2−k2vˉi=1∑kvi=k21(i=1∑kvi)2+k1i=1∑kvi2−k2vˉi=1∑kvi=k21(i=1∑kvi)2+k1i=1∑kvi2−k22(i=1∑kvi)2=k1i=1∑kvi2−k21(i=1∑kvi)2
则 m m m 项的方差为 s 2 = 1 m ∑ i = 1 m v i 2 − 1 m 2 ( ∑ i = 1 m v i ) 2 s^2=\frac 1m\sum_{i=1}^mv_i^2-\frac 1{m^2}\Big(\sum_{i=1}^mv_i\Big)^2 s2=m1i=1∑mvi2−m21(i=1∑mvi)2
乘上 m 2 m^2 m2,得: s 2 m 2 = m ∑ i = 1 m v i 2 − ( ∑ i = 1 m v i ) 2 s^2m^2=m\sum_{i=1}^mv_i^2-\Big(\sum_{i=1}^mv_i\Big)^2 s2m2=mi=1∑mvi2−(i=1∑mvi)2
由于
(
∑
i
=
1
m
v
i
)
2
\Big(\sum\limits_{i=1}^mv_i\Big)^2
(i=1∑mvi)2 固定不变,因此要让
s
2
m
2
s^2m^2
s2m2 最小,只需要最小化
∑
i
=
1
m
v
i
2
\sum\limits_{i=1}^mv_i^2
i=1∑mvi2 即可。
定义:
f
[
i
]
[
j
]
f[i][j]
f[i][j] 表示前面
i
i
i 个数分成
j
j
j 段的最小价值,
s
u
m
[
i
]
=
∑
i
=
1
i
a
i
sum[i]=\sum\limits_{i=1}^i a_i
sum[i]=i=1∑iai
转移:
f
[
i
]
[
j
]
=
min
k
=
1
i
−
1
f
[
k
]
[
j
−
1
]
+
(
s
u
m
[
i
]
−
s
u
m
[
k
]
)
2
f[i][j]=\min\limits_{k=1}^{i-1}f[k][j-1]+(sum[i]-sum[k])^2
f[i][j]=k=1mini−1f[k][j−1]+(sum[i]−sum[k])2
时间复杂度
Θ
(
n
3
)
\Theta(n^3)
Θ(n3),考虑斜率优化。
设
k
a
<
k
b
k_a<k_b
ka<kb 且
k
a
k_a
ka 优于
k
b
k_b
kb,则有:
f
[
k
a
]
[
j
−
1
]
+
(
s
u
m
[
i
]
−
s
u
m
[
k
a
]
)
2
<
f
[
k
b
]
[
j
−
1
]
+
(
s
u
m
[
i
]
−
s
u
m
[
k
b
]
)
2
f[k_a][j-1]+(sum[i]-sum[k_a])^2<f[k_b][j-1]+(sum[i]-sum[k_b])^2
f[ka][j−1]+(sum[i]−sum[ka])2<f[kb][j−1]+(sum[i]−sum[kb])2
f [ k a ] [ j − 1 ] + 2 s u m [ i ] ∗ s u m [ k a ] + s u m [ k a ] 2 < f [ k b ] [ j − 1 ] + 2 s u m [ i ] ∗ s u m [ k b ] + s u m [ k b ] 2 f[k_a][j-1]+2sum[i]*sum[k_a]+sum[k_a]^2<f[k_b][j-1]+2sum[i]*sum[k_b]+sum[k_b]^2 f[ka][j−1]+2sum[i]∗sum[ka]+sum[ka]2<f[kb][j−1]+2sum[i]∗sum[kb]+sum[kb]2
化简: ( f [ k a ] [ j − 1 ] + s u m [ k a ] 2 ) − ( f [ k b ] [ j − 1 ] + s u m [ k b ] 2 ) < 2 s u m [ i ] × ( s u m [ k a ] − s u m [ k b ] ) (f[k_a][j-1]+sum[k_a]^2)-(f[k_b][j-1]+sum[k_b]^2)<2sum[i]\times(sum[k_a]-sum[k_b]) (f[ka][j−1]+sum[ka]2)−(f[kb][j−1]+sum[kb]2)<2sum[i]×(sum[ka]−sum[kb])
整理:整理: ( f [ k a ] [ j − 1 ] + s u m [ k a ] 2 ) − ( f [ k b ] [ j − 1 ] + s u m [ k b ] 2 ) ( s u m [ k a ] − s u m [ k b ] ) < 2 s u m [ i ] \frac{(f[k_a][j-1]+sum[k_a]^2)-(f[k_b][j-1]+sum[k_b]^2)}{(sum[k_a]-sum[k_b])}<2sum[i] (sum[ka]−sum[kb])(f[ka][j−1]+sum[ka]2)−(f[kb][j−1]+sum[kb]2)<2sum[i]
单调队列维护递增斜率即可,转移时间复杂度 Θ ( 1 ) \Theta(1) Θ(1),总时间复杂度 Θ ( n 2 ) \Theta(n^2) Θ(n2)