首页 > 代码库 > CodeForces 474.D Flowers

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 474.D Flowers