所有这类跳台阶问题,都可以考虑动态规划,考虑一步怎么到达
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()]);
}
}
}

京公网安备 11010502036488号