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的更多相关文章

  1. bzoj3398 [Usaco2009 Feb]Bullcow 牡牛和牝牛——递推 / 组合数

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3398 对于这种有点巧妙的递推还是总是没有思路... 设计一个状态 f[i] 表示第 i 位置 ...

  2. BZOJ3398: [Usaco2009 Feb]Bullcow 牡牛和牝牛

    3398: [Usaco2009 Feb]Bullcow 牡牛和牝牛 Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 30  Solved: 17[Sub ...

  3. BZOJ 3398: [Usaco2009 Feb]Bullcow 牡牛和牝牛( dp )

    水题...忘了取模就没1A了.... --------------------------------------------------------------------------- #incl ...

  4. 3398: [Usaco2009 Feb]Bullcow 牡牛和牝牛

    3398: [Usaco2009 Feb]Bullcow 牡牛和牝牛 Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 243  Solved: 167[S ...

  5. BZOJ_3398_[Usaco2009 Feb]Bullcow 牡牛和牝牛_组合数学

    BZOJ_3398_[Usaco2009 Feb]Bullcow 牡牛和牝牛_组合数学 Description     约翰要带N(1≤N≤100000)只牛去参加集会里的展示活动,这些牛可以是牡牛, ...

  6. bzoj:3398 [Usaco2009 Feb]Bullcow 牡牛和牝牛

    Description     约翰要带N(1≤N≤100000)只牛去参加集会里的展示活动,这些牛可以是牡牛,也可以是牝牛.牛们要站成一排.但是牡牛是好斗的,为了避免牡牛闹出乱子,约翰决定任意两只牡 ...

  7. 刷题向》关于一道比较优秀的递推型DP(openjudge9275)(EASY+)

    先甩出传送门:http://noi.openjudge.cn/ch0206/9275/ 这道题比较经典, 最好不要看题解!!!!! 当然,如果你执意要看我也没有办法 首先,显然的我们可以用 f [ i ...

  8. 1578: [Usaco2009 Feb]Stock Market 股票市场

    1578: [Usaco2009 Feb]Stock Market 股票市场 Time Limit: 10 Sec  Memory Limit: 64 MBSubmit: 414  Solved: 1 ...

  9. 【BZOJ-2476】战场的数目 矩阵乘法 + 递推

    2476: 战场的数目 Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 58  Solved: 38[Submit][Status][Discuss] D ...

  10. 从一道NOI练习题说递推和递归

    一.递推: 所谓递推,简单理解就是推导数列的通项公式.先举一个简单的例子(另一个NOI练习题,但不是这次要解的问题): 楼梯有n(100 > n > 0)阶台阶,上楼时可以一步上1阶,也可 ...

随机推荐

  1. python中的binascii模块

    binascii模块拿来干嘛的? 答:进制转换xxoo #!/usr/bin/env python # encoding:utf-8 # by i3ekr import binascii s = &q ...

  2. 简谈const限定符

    const修饰的数据类型是常量类型,常量类型的对象和变量在定义初始化后是不能被更新的.其实只用记住这一个概念,就可以明白const操作对象的方法. 1)定义const常量 最简单的: const in ...

  3. Python基础=== Tkinter Grid布局管理器详解

    本文转自:https://www.cnblogs.com/ruo-li-suo-yi/p/7425307.html          @ 箬笠蓑衣 Grid(网格)布局管理器会将控件放置到一个二维的表 ...

  4. const 引用的分析

    const 引用: 在初始化常量引用时,允许用任意表达式作为初始值,只要该表达式的结果能转换成引用的类型即可.尤其,允许为一个常量引用绑定非常量的对象.字面值,甚至是一个表达式.我们来看 const ...

  5. sicily 4699. 简单哈希

    Description 使用线性探测法(Linear Probing)可以解决哈希中的冲突问题,其基本思想是:设哈希函数为h(key) = d, 并且假定哈希的存储结构是循环数组, 则当冲突发生时,  ...

  6. Oracle 获取ddl语句

    --得到所有表空间的ddl语句 SELECT DBMS_METADATA.GET_DDL('TABLESPACE', TS.tablespace_name)FROM DBA_TABLESPACES T ...

  7. python中eval函数使用

    把字符串转换为字典: s = "{'a':1}" eval(s)

  8. Eclipse和idea快捷键对比

    花了一天时间熟悉IDEA的各种操作,将各种快捷键都试了一下,感觉很是不错!于是就整理了一下我经常用的一些Eclipse快捷键与IDEA的对比,方便像我一样使用Eclipse多年但想尝试些改变的同学们. ...

  9. 从设计图到CSS:rem+viewport+媒体查询+Sass

    根据UI图对移动端的h5页面做样式重构,是前端工程师的本职工作,看似简单,不过想做好却并不容易.下面总结一下其中要点. rem rem是一种相对长度单位,参考的基准是<html>标签定义的 ...

  10. 取消div,a等标签点击效果

    当标签被设置onclick事件之后,在有些手机浏览器中,点击这些标签,会有点击变色效果.想要取消点击变色效果. 添加:div{-webkit-tap-highlight-color:rgba(0,0, ...