[USACO Feb09] 牡牛和牝牛

本文介绍了USACO竞赛中关于牡牛和牝牛排列问题的解决方案。通过动态规划方法,计算在限制牡牛相邻条件下的排列总数。文章详细阐述了动态规划的状态转移方程,并给出了代码实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目描述

题目

题目描述

约翰要带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]=F[i

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值