当前位置: 代码迷 >> 综合 >> [USACO Feb09] 牡牛和牝牛
  详细解决方案

[USACO Feb09] 牡牛和牝牛

热度:89   发布时间:2023-12-08 06:05:15.0

[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]