【OpenJudge9275】【Usaco2009 Feb】【递推】Bullcow
Bullcow
总时间限制: 12000ms 单个测试点时间限制: 1000ms 内存限制: 131072kB
【描述】
一年一度的展会要来临了,农民约翰想要把N(1 <= N <= 100,000)只奶牛和公牛安排在单独的一行中。 约翰发现最近公牛们非常好斗;假如两只公牛在这一行中靠的太近,他们就会吵架,以至于斗殴,破坏这和谐的环境。约翰非常的足智多谋,他计算出任何两只公牛之间至少要有K (0 <= K < N)只奶牛,这样才能避免斗殴。 约翰希望你帮助他计算一下有多少种安排方法,可避免任何斗殴的的发生。约翰认为每头公牛都是一样的,每头奶牛都是一样的。因而,只要在一些相同的位置上有不同种类的牛,那这就算两种不同的方法。
【输入】
第一行:两个用空格隔开的数:N和K
【输出】
第一行:一个单独的数,即约翰可以安排的方法数。考虑到这个数可能很大,你只要输出mod 5,000,011之后的结果就可以了。
【样例输入】
4 2
输入注释
约翰想要一排4头牛,但是任何两只公牛之间至少有两头奶牛
【样例输出】
6
【提示】
下面的就是约翰思考出可行的6种方案(C代表奶牛,B代表公牛)
CCCC
BCCC
CBCC
CCBC
CCCB
BCCB
【Solution】
dp[i][0]表示位置i不放公牛,dp[i][1]表示位置i放公牛。
当位置i不放公牛,位置i-1对其不产生影响,所以dp[i][0]可以从dp[i-1][0]和dp[i-1][1]转移过来。
当位置i放公牛,位置i-M一定不能放公牛,所以dp[i][1]可以从dp[i-M][0]转移过来。
还有一个难点在预处理上。在1~M中如果位置i放一头公牛那么就只能放那一头公牛,所以dp[i][1]=1。如果位置i不放牛,那么放公牛的方案就有i-1种,不放公牛的方案有1种,所以dp[i][0]=i-1+1=i。
总结一下,预处理时dp[i][1]=1,dp[i][0]=i;DP时dp[i][0]=dp[i-1][0]+dp[i-1][1],dp[i][1]=dp[i-M][0]。
AC代码:
#include <cstdio>
const int MOD=;
int N,M;
int dp[][];
int main(){
scanf("%d%d",&N,&M); dp[][]=;dp[][]=;
for(int i=;i<=M;++i) dp[i][]=,dp[i][]=i;
for(int i=M+;i<=N;++i){
dp[i][]=dp[i-][]%MOD+dp[i-][]%MOD;
dp[i][]=dp[i-M][]%MOD;
}
printf("%d",(dp[N][]+dp[N][])%MOD);
return ;
}
【OpenJudge9275】【Usaco2009 Feb】【递推】Bullcow的更多相关文章
- bzoj3398 [Usaco2009 Feb]Bullcow 牡牛和牝牛——递推 / 组合数
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3398 对于这种有点巧妙的递推还是总是没有思路... 设计一个状态 f[i] 表示第 i 位置 ...
- BZOJ3398: [Usaco2009 Feb]Bullcow 牡牛和牝牛
3398: [Usaco2009 Feb]Bullcow 牡牛和牝牛 Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 30 Solved: 17[Sub ...
- BZOJ 3398: [Usaco2009 Feb]Bullcow 牡牛和牝牛( dp )
水题...忘了取模就没1A了.... --------------------------------------------------------------------------- #incl ...
- 3398: [Usaco2009 Feb]Bullcow 牡牛和牝牛
3398: [Usaco2009 Feb]Bullcow 牡牛和牝牛 Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 243 Solved: 167[S ...
- BZOJ_3398_[Usaco2009 Feb]Bullcow 牡牛和牝牛_组合数学
BZOJ_3398_[Usaco2009 Feb]Bullcow 牡牛和牝牛_组合数学 Description 约翰要带N(1≤N≤100000)只牛去参加集会里的展示活动,这些牛可以是牡牛, ...
- bzoj:3398 [Usaco2009 Feb]Bullcow 牡牛和牝牛
Description 约翰要带N(1≤N≤100000)只牛去参加集会里的展示活动,这些牛可以是牡牛,也可以是牝牛.牛们要站成一排.但是牡牛是好斗的,为了避免牡牛闹出乱子,约翰决定任意两只牡 ...
- 刷题向》关于一道比较优秀的递推型DP(openjudge9275)(EASY+)
先甩出传送门:http://noi.openjudge.cn/ch0206/9275/ 这道题比较经典, 最好不要看题解!!!!! 当然,如果你执意要看我也没有办法 首先,显然的我们可以用 f [ i ...
- 1578: [Usaco2009 Feb]Stock Market 股票市场
1578: [Usaco2009 Feb]Stock Market 股票市场 Time Limit: 10 Sec Memory Limit: 64 MBSubmit: 414 Solved: 1 ...
- 【BZOJ-2476】战场的数目 矩阵乘法 + 递推
2476: 战场的数目 Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 58 Solved: 38[Submit][Status][Discuss] D ...
- 从一道NOI练习题说递推和递归
一.递推: 所谓递推,简单理解就是推导数列的通项公式.先举一个简单的例子(另一个NOI练习题,但不是这次要解的问题): 楼梯有n(100 > n > 0)阶台阶,上楼时可以一步上1阶,也可 ...
随机推荐
- linux编程之消息队列
消息队列是内核地址空间中的内部链表,通过linux内核在各个进程之间传递内容,消息顺序地发送到消息队列中,并且以几种不同的方式 从队列中获取,每个消息队列可以用IPC标识符唯一的进行标识,内核中的消息 ...
- 設定 gpio 為 讀取用途,需注意的參數
Schematic 解說 上面的 線路圖, R1 R2 只能有一個被接上, R3 R4 只能有一個被接上, 是使用 gpio 讀取 電壓 判斷為0 或是 1 這時的 gpio 設定,其中一個參數需設為 ...
- REST,Web 服务,REST-ful 服务
介绍 REpresentational State Transfer (REST) 是一种架构原则,其中将 web 服务视为资源,可以由其 URL 唯一标识.RESTful Web 服务的关键特点是明 ...
- [ python ] 小脚本及demo-持续更新
1. 备份文件并进行 md5 验证 需求分析: 根据需求,这是一个流程化处理的事件. 检验拷贝文件是否存在,不存在则执行拷贝,拷贝完成再进行 md5 值的比对,这是典型的面向过程编程: 代码如下: ...
- mac下谷歌chrome浏览器的快捷键
1. 标签页和窗口快捷键 ⌘-N 打开新窗口. ⌘-T 打开新标签页. ⌘-Shift-N 在隐身模式下打开新窗口. 按 ⌘-O,然后选择文件. 在 Chrome 浏览器中打开计算机中的文件. 按住 ...
- 《逐梦旅程 WINDOWS游戏编程之从零开始》笔记3——输入消息处理,物理建模与粒子系统初步
第7章 Windows游戏输入消息处理 1. 键盘消息处理 之前提到的窗口过程函数有两参数与消息输出有关——wParam和llParam LRESULT CALLBACK WindowProc( _I ...
- linux下环境变量设置的问题
在当前环境变量前新增加一个路径 export PATH=/your/bin/path:$PATH export LD_LIBRARY_PATH=/your/lib/path:$LD_LIBRARY_P ...
- 讲IOC非常好的一篇文章--初步弄懂DI
http://jinnianshilongnian.iteye.com/blog/1413846 http://jinnianshilongnian.iteye.com/blog/pdf 之后又看了类 ...
- 微信小程序 - "锚点"功能的实现
“锚点”功能在实际应用设计的好,可以提高用户体验.今天碰到一个类似下面功能: 由于页面数据比较多,除了做些上拉加载,下拉刷新等优化.还可以进行进行分类,如上图.功能要求:点击导航的菜单,相应页面的分类 ...
- Centos7Yum安装Mysql8
1.去官网下载rpm文件,该文件专门用于yum安装方式: https://dev.mysql.com/downloads/repo/yum/ 然后拉到最下面,我下载的是第一个:Red Hat Ente ...