题意:有两种花可以吃,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; }