hihoCoder #1758 加减

\(\DeclareMathOperator{\lowbit}{lowbit}\)

题目大意

对于一个数 \(x\),设它最低位的 1 是第 \(i\) 位,则 \(\lowbit(x)=2i\)

例如 \(\lowbit(5)=1\)\(\lowbit(12)=4\)

定义对 \(x\)的一次变换为:有 50% 的概率变成 \(x+\lowbit(x)\),有 50% 的概率变成 \(x-\lowbit(x)\)

定义 \(f(x)\) 为对 \(x\) 不停变换,变换到 0 的期望变换次数。

给定 \(L, R\)\(0\le L \le R < 2^{31}\)),求 \(\sum\limits_{x=L}^{R} f(x)\)

答案对 \(998244353\) 取模。

分析

题解是 DP,但是我没看懂。我想到的一种记忆化(memoization)递归求解的方法,能 AC,但是我搞不清楚这种方法的复杂度。


\[ S(n) = \sum_{i=0}^{n} = f(i) \]

则我们有

\[
\begin{aligned}
f(0) &= S(0) = 0 \\
f(1) &= S(1) = 2 \\
S(2n) &= S(n) + n + \frac{S(n) + S(n-1)}{2} \\
S(2n+1) &= S(n) + n+1 + \frac{S(n+1) + S(n)}{2}
\end{aligned}
\]

根据 \(S(n)\) 的递推式,是否可以猜测 \(S(n)\) 关于 \(n\) 是线性增长的呢?

这个问题是很值得研究的。

记忆化递归(recursion with memoization)

posted @ 2018-06-08 15:55  Pat  阅读(264)  评论(0编辑  收藏  举报