CodeForces 474.D Flowers

题意:

有n朵花排成一排,小明要么吃掉连续的k朵白花,或者可以吃单个的红花。

给出一个n的区间[a, b],输出总吃花的方法数模 109+7 的值。

分析:

设d(i)表示吃i朵花的方案数。

则有如下递推关系:

d[i] = d[i-1] + d[i-k], (i ≥ k, d[0] = 1)

我们在计数i+1的情况时,可以分为如下两种情况:

  • 最后一朵是红花,方案数为d[i]
  • 最后k朵是白花,方案数为d[i-k]

然后预处理一下前缀和。

代码中注意取模。

 1 #include <cstdio>

 2 const int maxn = 100000 + 10;

 3 const int MOD = 1000000000 + 7;

 4 int d[maxn];

 5 

 6 int main()

 7 {

 8     int t, k, i;

 9     scanf("%d%d", &t, &k);

10 

11     d[0] = 1;

12     for(i = 1; i < k; ++i)    d[i] = 1;

13     for(; i < maxn; ++i)    d[i] = (d[i-1] + d[i - k]) % MOD;

14     

15     for(i = 1; i < maxn; ++i)    d[i] = (d[i] + d[i-1]) % MOD;

16     for(i = 0; i < t; ++i)

17     {

18         int a, b;

19         scanf("%d%d", &a, &b);

20         printf("%d\n", (d[b] - d[a-1] + MOD) % MOD);

21     }

22     

23     return 0;

24 }
代码君

 

你可能感兴趣的:(codeforces)