Luogu P4072 [SDOI2016]征途(坑)

考虑前 kkk 项的方差。
s2=1k∑i=1k(vˉ−vi)2s=1k(∑i=1k(vˉ2+vi2−2vˉvi))=1k(∑i=1kvˉ2+∑i=1kvi2−∑i=1k2vˉvi))=1k(kvˉ2+∑i=1kvi2−2vˉ∑i=1kvi))=vˉ2+1k∑i=1kvi2−2kvˉ∑i=1kvi=1k2(∑i=1kvi)2+1k∑i=1kvi2−2kvˉ∑i=1kvi=1k2(∑i=1kvi)2+1k∑i=1kvi2−2k2(∑i=1kvi)2=1k∑i=1kvi2−1k2(∑i=1kvi)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=1k(vˉvi)2s=k1(i=1k(vˉ2+vi22vˉvi))=k1(i=1kvˉ2+i=1kvi2i=1k2vˉvi))=k1(kvˉ2+i=1kvi22vˉi=1kvi))=vˉ2+k1i=1kvi2k2vˉi=1kvi=k21(i=1kvi)2+k1i=1kvi2k2vˉi=1kvi=k21(i=1kvi)2+k1i=1kvi2k22(i=1kvi)2=k1i=1kvi2k21(i=1kvi)2

mmm 项的方差为 s2=1m∑i=1mvi2−1m2(∑i=1mvi)2s^2=\frac 1m\sum_{i=1}^mv_i^2-\frac 1{m^2}\Big(\sum_{i=1}^mv_i\Big)^2s2=m1i=1mvi2m21(i=1mvi)2

乘上 m2m^2m2,得:s2m2=m∑i=1mvi2−(∑i=1mvi)2s^2m^2=m\sum_{i=1}^mv_i^2-\Big(\sum_{i=1}^mv_i\Big)^2s2m2=mi=1mvi2(i=1mvi)2

由于 (∑i=1mvi)2\Big(\sum\limits_{i=1}^mv_i\Big)^2(i=1mvi)2 固定不变,因此要让 s2m2s^2m^2s2m2 最小,只需要最小化 ∑i=1mvi2\sum\limits_{i=1}^mv_i^2i=1mvi2 即可。
定义: f[i][j]f[i][j]f[i][j] 表示前面 iii 个数分成 jjj 段的最小价值,sum[i]=∑i=1iaisum[i]=\sum\limits_{i=1}^i a_isum[i]=i=1iai
转移:f[i][j]=min⁡k=1i−1f[k][j−1]+(sum[i]−sum[k])2f[i][j]=\min\limits_{k=1}^{i-1}f[k][j-1]+(sum[i]-sum[k])^2f[i][j]=k=1mini1f[k][j1]+(sum[i]sum[k])2
时间复杂度 Θ(n3)\Theta(n^3)Θ(n3),考虑斜率优化。
ka&lt;kbk_a&lt;k_bka<kbkak_aka 优于 kbk_bkb,则有:
f[ka][j−1]+(sum[i]−sum[ka])2&lt;f[kb][j−1]+(sum[i]−sum[kb])2f[k_a][j-1]+(sum[i]-sum[k_a])^2&lt;f[k_b][j-1]+(sum[i]-sum[k_b])^2f[ka][j1]+(sum[i]sum[ka])2<f[kb][j1]+(sum[i]sum[kb])2

f[ka][j−1]+2sum[i]∗sum[ka]+sum[ka]2&lt;f[kb][j−1]+2sum[i]∗sum[kb]+sum[kb]2f[k_a][j-1]+2sum[i]*sum[k_a]+sum[k_a]^2&lt;f[k_b][j-1]+2sum[i]*sum[k_b]+sum[k_b]^2f[ka][j1]+2sum[i]sum[ka]+sum[ka]2<f[kb][j1]+2sum[i]sum[kb]+sum[kb]2

化简:(f[ka][j−1]+sum[ka]2)−(f[kb][j−1]+sum[kb]2)&lt;2sum[i]×(sum[ka]−sum[kb])(f[k_a][j-1]+sum[k_a]^2)-(f[k_b][j-1]+sum[k_b]^2)&lt;2sum[i]\times(sum[k_a]-sum[k_b])(f[ka][j1]+sum[ka]2)(f[kb][j1]+sum[kb]2)<2sum[i]×(sum[ka]sum[kb])

整理:整理:(f[ka][j−1]+sum[ka]2)−(f[kb][j−1]+sum[kb]2)(sum[ka]−sum[kb])&lt;2sum[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])}&lt;2sum[i](sum[ka]sum[kb])(f[ka][j1]+sum[ka]2)(f[kb][j1]+sum[kb]2)<2sum[i]

单调队列维护递增斜率即可,转移时间复杂度 Θ(1)\Theta(1)Θ(1),总时间复杂度 Θ(n2)\Theta(n^2)Θ(n2)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值