先甩出传送门:http://noi.openjudge.cn/ch0206/9275/

  这道题比较经典,

  最好不要看题解!!!!!

  当然,如果你执意要看我也没有办法

  首先,显然的我们可以用 f [ i ] 和 g [ i ] 来表示在第 i 行是公牛或母牛的情况

  那么易得递推式:f [ i ] = f [ i - k - 1 ] + g [ i - k - 1 ] , g [ i ] = g [ i - 1 ] + f [ i - 1 ]

  于是通过 f [ n ] + g [ n ] 得到最后答案

  但实际上,我们可以将这两种状态合并

  加上对于k的判断就可以得到:s [ i ] = s [ i - 1 ] +( i >k + 1 ) ? s [ i - k -1 ] : 1

  就是当 i < = k 的时候,我们只需要加上前一个的全部状态+1,就是这个格子是母牛的状态加上唯一的这个格子是公牛的状态。

  而当i > k 的时候,也是考虑两种情况,不过这一格是公牛的方案数不再是1,而是s [ i - k - 1 ],然后加上就可以扫一遍解决啦

  甩题目

描述

一年一度的展会要来临了,农民约翰想要把N(1 <= N <= 100,000)只奶牛和公牛安排在单独的一行中。 约翰发现最近公牛们非常好斗;假如两只公牛在这一行中靠的太近,他们就会吵架,以至于斗殴,破坏这和谐的环境。约翰非常的足智多谋,他计算出任何两只公牛之间至少要有K (0 <= K < N)只奶牛,这样才能避免斗殴。 约翰希望你帮助他计算一下有多少种安排方法,可避免任何斗殴的的发生。约翰认为每头公牛都是一样的,每头奶牛都是一样的。因而,只要在一些相同的位置上有不同种类的牛,那这就算两种不同的方法。

输入

第一行:两个用空格隔开的数:N和K

输出

第一行:一个单独的数,即约翰可以安排的方法数。考虑到这个数可能很大,你只要输出mod 5,000,011之后的结果就可以了。

样例输入
4 2
输入注释
约翰想要一排4头牛,但是任何两只公牛之间至少有两头奶牛
样例输出
6
然后直接甩代码咯
 #include<stdio.h>
int n,k,s[];
int main()
{
scanf("%d%d",&n,&k);
s[]=;
for(int i=;i<=n;i++)
s[i]=(s[i-]+((i>k+)?s[i-k-]:))%;
printf("%d",s[n]);
return ;
}

最新文章

  1. a版本冲刺第十天
  2. Head First 设计模式--1策略模式 组合优于继承
  3. Masonry 轻量级布局框架的使用
  4. Android开发-API指南-&lt;activity-alias&gt;
  5. Spring Boot MyBatis 通用Mapper插件集成
  6. Apache Kafka:下一代分布式消息系统
  7. Sublime Text 3 中文汉化绿色破解特别版下载
  8. 修改进程占用内存SetProcessWorkingSetSize函数(多篇相关文章值得学习)
  9. Mlecms Getshell
  10. 并发编程之wait()、notify()
  11. restful规范简要概述
  12. boost中bind的使用
  13. 《软件性能测试与LoadRunner实战教程》喜马拉雅有声图书上线
  14. webpack介绍 安装 常用命令
  15. vue scoped 深度作用选择器
  16. hive在命令行消除进度等错误信息
  17. day28 网络编程
  18. 菜鸟学数据库(六)——方便快捷的开启、关闭Oracle服务
  19. 【css】弹性盒模型
  20. centos7,yum安装工具报错

热门文章

  1. 读懂IL代码就这么简单 ---- IL系列文章
  2. 学习笔记:AJAX 跨域问题
  3. 笔记:Node.js 的 Buffer 缓冲区
  4. FPGA的新变化
  5. 30个让人兴奋的视差滚动(Parallax Scrolling)效果网站--转
  6. [转][Java]语法规范
  7. Resource interpreted as Document but transferred with MIME type application/json laravel异常请求返回警告
  8. 01——微信小程序官方demo讲解——文件结构
  9. springMVC json自动将date类型转换为long
  10. 第五章 服务容错保护: Spring Cloud Hystrix