题意:有两种花可以吃,white花只能连续吃k个,red花不受限制,当吃a到b朵花时一共有多少种吃法?注意:(WWWR)不算,因为W(W没有k)个连续 WWR
所以:dp[i]表前i个合法的数量
则: dp[i] = dp[i - 1] + dp[i - k]
dp[i - 1] 相当于当前位置为R(没有限制)
dp[i - k] 相当于当前位置为W(i-k这个范围为W)
#include <bits/stdc++.h>
using namespace std;
const int mod = 1e9 + 7;
const int maxn = 1e6 + 5;
const int maxm = 1e5;
int dp[maxn], sum[maxn];
int main() {
int n, k;
cin >> n >> k;
dp[0] = 1;
for (int i = 1; i <= maxm; i++) {
dp[i] = dp[i - 1];
if (i >= k) dp[i] += dp[i - k];
dp[i] %= mod;
}
for (int i = 1; i <= maxm; i++) {
sum[i] = sum[i - 1] + dp[i];
sum[i] %= mod;
}
int l, r;
while (n--) {
cin >> l >> r;
cout << (sum[r] - sum[l - 1] + mod) % mod << endl;
}
return 0;
} 
京公网安备 11010502036488号