hdu 2709

地址:http://acm.hdu.edu.cn/showproblem.php?pid=2709

题意:一个整数n,表示为若干个2的幂的数字和,问有多少种(mod 1e9)。

mark:递推题,考虑1的个数不同,剩下的都是2的幂,可以除以2转移成更小的状态。得递推方程为dp[i] = dp[i-2] + dp[i/2]。注意初始值。

代码:

 1 # include <stdio.h>
 2 
 3 
 4 int tab[1000010] = {1, 1, 2} ;
 5 
 6 
 7 int main ()
 8 {
 9     int i ;
10     for (i = 3 ; i <= 1000000 ; i++)
11         tab[i] = (tab[i-2] + tab[i/2] ) % 1000000000 ;
12     while (~scanf ("%d", &i))
13         printf ("%d\n", tab[i]) ;
14     return 0 ;
15 }
posted @ 2012-06-10 10:00  Seraph2012  阅读(200)  评论(0编辑  收藏  举报