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

codeforces 271A-C语言解题报告

Codeforces Round #726 (Div. 2) B. Bad Boy(贪心)

CodeForces 271DGood Substrings