51nod1048

题意

51nod

做法一(暴力)

\(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}\]

要写高精

posted @ 2020-04-26 16:37  Grice  阅读(121)  评论(0编辑  收藏  举报