Bootstrap

python xml字符串_python 从字符串中解析xml

期望看起来无从下手,先尝试寻找某个局面的最优解法,就是最少花多少步可以全变 0。

首先观察到一个性质,每个开关至多操作 \(1\) 次,因为操作 \(2k\) 次等于没操作,操作 \(2k+1\) 次等于操作 \(1\) 次,这样就把答案限制在了 \(\leq n\)。

这是所有这种一个开关控制多个灯改变亮暗情况的点灯类型的题的共有性质。

但是这样还是不能做,于是观察开关 \(i\),改变的是 \(i\) 的所有约数,有的灯可以被多个开关影响到,但是 \(n\) 号灯一定只有 \(n\) 号开关能影响,因为 \(n\) 已经是最大的数了,不可能有它的倍数。

于是 \(n\) 号开关是操作还是不操作,直接就定下来了。

这样以后 \(n-1\) 号开关是否操作,也能确定,以此类推,每个开关操作与否直接被确定。

大多数点灯题都是能找到这样一个只被一个开关控制的灯的切入点的。

然后我们发现,到这一步之后,问题被转化了,有 \(n\) 个数,其中 \(m\) 个是 \(0\),剩下的是 \(1\),每次等概率随机选取一个数,将它变为另一个状态,求使得所有数中 \(1\) 的个数小于等于 \(k\) 的期望步数。而且这只和 \(1\) 的数量有关了,和哪几个开关是 \(1\) 无关。

期望一般考虑倒推,设 \(dp_i\) 为当前有 \(i\) 个 \(1\) 时,期望还需要多少步才能变成全 \(0\)。

当 \(i\leq k\) 时 \(dp_i=i\)

否则 \(dp_i=\frac{i}{n}dp_{i-1}+\frac{n-i}{n}dp_{i+1}+1\)

直接高斯消元不可行,但是这个式子看起来可以递推。

\[i\times dp_i+(n-i)\times dp_i=i\times dp_{i-1}+(n-i)\times dp_{i+1}+n

\]

\[i\times (dp_{i}-dp_{i-1})= (n-i)\times (dp_{i+1}-dp_{i})+n

\]

\[dp_{i}-dp_{i-1}=\frac{n-i}{i}\times (dp_{i+1}-dp_{i})+\frac{n}{i}

\]

还需要一个边界条件:\(dp_{n}-dp_{n-1}=1\)。

就可以递推了。

最后 \(dp_m\) 就是答案。

代码不贴了。

;