Codeforces Round #271 (Div. 2) D. Flowers (递推)
Posted Recoder
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Codeforces Round #271 (Div. 2) D. Flowers (递推)相关的知识,希望对你有一定的参考价值。
题目链接:http://codeforces.com/problemset/problem/474/D
用RW组成字符串,要求w的个数要k个连续出现,R任意,问字符串长度为[a, b]时,字符串的种类有多少。
递推,dp[i]表示长度为i的种类有多少。当i < k的时候 dp[i] = 1 , 当i == k的时候 dp[i] = 2 , 否则 dp[i] = dp[i - 1] + dp[i - k] 。
1 #include <bits/stdc++.h> 2 using namespace std; 3 const int MAXN = 1e5 + 10; 4 typedef __int64 LL; 5 LL mod = 1e9 + 7; 6 LL dp[MAXN] , ans[MAXN]; 7 int main() 8 { 9 int n , k , a , b; 10 scanf("%d %d" , &n , &k); 11 dp[0] = 1; 12 ans[0] = 0; 13 for(int i = 1 ; i <= 1e5 ; ++i) { 14 if(i >= k) 15 dp[i] = (dp[i - k] + dp[i - 1]) % mod; 16 else 17 dp[i] = 1; 18 ans[i] = (ans[i - 1] + dp[i]) % mod; 19 } 20 while(n--) { 21 scanf("%d %d" , &a , &b); 22 printf("%lld\n" , (ans[b] - ans[a - 1] + mod) % mod); 23 } 24 return 0; 25 }
以上是关于Codeforces Round #271 (Div. 2) D. Flowers (递推)的主要内容,如果未能解决你的问题,请参考以下文章
Codeforces Round #436 E. Fire(背包dp+输出路径)
[ACM]Codeforces Round #534 (Div. 2)
Good Substrings CodeForces - 271D