题意和思路于zoj3747类似
zoj3747博客链接:https://blog.youkuaiyun.com/qq_36542637/article/details/79842141
只不过数据范围大,使用了java大数类
import java.math.*;
import java.util.*;
public class Main {
public static BigInteger dp[][] = new BigInteger[105][2];
public static int n;
public static BigInteger deal(int k) {
dp[0][0] = BigInteger.valueOf(1);
dp[0][1] = BigInteger.valueOf(0);
for (int i = 1; i <= n; i++) {
if (i <= k)
dp[i][0] = dp[i - 1][0].add(dp[i - 1][1]);
else if (i == k + 1)
dp[i][0] = dp[i - 1][0].add(dp[i - 1][1]).subtract(BigInteger.valueOf(1));
else
dp[i][0] = dp[i - 1][0].add(dp[i - 1][1]).subtract(dp[i - k - 1][1]);
dp[i][1] = dp[i - 1][0].add(dp[i - 1][1]);
}
return dp[n][1].add(dp[n][0]);
}
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
while (in.hasNext()) {
n = in.nextInt();
int k = in.nextInt();
System.out.println(deal(n).subtract(deal(k - 1)));
}
}
}