51nod1048
题意
做法一(暴力)
令\(f_n\)为\(n\)分解方案数
- \(n~is~even\)
\(f_n=f_{n-1}+f_{n/2}\) - \(n~is~odd\)
\(f_n=f_{n-1}\)
做法二
考虑将\(n\)二进制分解,然后出现有效位分别为\(a_1,a_2,...,a_m\)
将\(n\)分解后,定义最小表示法为升序排列
\(n\)的最小表示法,可以唯一地依次分段,和为\(2^{a_1},2^{a_2},2^{a_m}\)
令\(f_{i,j}\)为处理完\(a_i\),最大数为\(2^j\)
令\(g_{i,j}\)为处理\(2^i\),最大数为\(2^j\)
\[\begin{aligned}\\
&f_{1,j}=g_{a_1,j},g_{i,i}=1\\
&f_{i,j}=\sum\limits_{k=0}^j f_{i-1,k}\times g_{a_i-k,j-k}(i\neq 1)\\
&g_{i,j}=\sum\limits_{k=0}f_{i-1,k}\times f_{i-1-k,j-k}(j\neq i)\\
\end{aligned}\]
要写高精