[USACO Feb09] 牡牛和牝牛
- 题目描述
-
- 题目
-
- 题目描述
- 输入格式
- 输出格式
- 样例输入
- 样例输出
- 输出说明
- 解决过程
-
- 思路
- 代码
- 感想
题目描述
题目
题目描述
约翰要带N(1≤N≤100000)只牛去参加集会里的展示活动,这些牛可以是牡牛,也可以是牝牛.牛们要站成一排.但是牡牛是好斗的,为了避免牡牛闹出乱子,约翰决定任意两只牡牛之间至少要有K(O≤K<N)只牝牛.
请计算一共有多少种排队的方法.所有牡牛可以看成是相同的,所有牝牛也一样,答案对5000011取模。
输入格式
一行,输入两个整数N和K.
输出格式
一个整数,表示排队的方法数.
样例输入
4 2
样例输出
6
输出说明
以下是6种可能的序列('B’代表牡牛,“C”代表牝牛):
CCCC
BCCC
CBCC
CCBC
CCCB
BCCB
解决过程
这很明显是一道动态规划
思路
我们设 f [ i ] [ 0 ] f [ i ] [ 0 ] f[i][0] 表示 当前位置 i 放牝牛的方案数 则
f [ i ] [ 0 ] f [ i ] [ 0 ] f[i][0] 表示 当前位置 i 放牡牛的方案数
如果当前位置放牝牛,它的上一个位置既可以放牝牛又可以放牡牛,即
F [ i ] [ 0 ] = F [ i ? 1 ] [ 0 ] + F [ i ? 1 ] [ 1 ] F[i][0]=F[i-1][0]+F[i-1][1] F[i][0]