所有这类跳台阶问题,都可以考虑动态规划,考虑一步怎么到达
F(n)=F(n-2^m)+F(n-2^(m-1))+...+F(n-2^0),n>=2^m;
注意边界,F(0)=1。
然后就是对10e9+3求模了。
import java.util.Scanner; public class Main { public static void main(String[] args){ Scanner sc = new Scanner(System.in); int n = sc.nextInt(); int[] ints = new int[n]; int[] dp = new int[1001]; dp[0] = 1; for(int i = 1; i < 1001; i++){ int temp = 1; while (temp <= i) { dp[i] += dp[i - temp]; dp[i] = dp[i] % 1000000003; temp *= 2; } } for(int i = 0; i < n; i++){ System.out.println(dp[sc.nextInt()]); } } }