题目:

假设农场种成熟的母牛每年只会生一头小母牛,并且永远不会死。第一年农场有一头成熟的母牛,从第二年开始,母牛开始生小母牛。每只小母牛3年之后成熟又可以生小母牛。给定整数N,求出N年后牛的数量。

分析:

首先第N-1年的牛都会活到第N年 

所有成熟的牛都会生一头小牛,如何统计成熟的牛的数量?

成熟的牛数量 = 第 N-3 年所有的牛 C(N-3)

第N-1年到N年出生的牛数量 = 出生小牛的数量就是到第N年成熟母牛的数量,也就是C(N-3)

所有牛数量C(N) = C(N-1) + C(N-3)                  C(1)=1  C(2)=2   C(3)=3

代码实现:

方法一:(暴力递归)

    public static int c1(int N) {if (N < 1) {return 0;}if (N == 1 || N == 2 || N == 3) {return N;}return c1(N-1) + c1(N-3);}

方法二:O(N)

    public static int c2(int N) {if (N < 1) {return 0;}if (N == 1 || N == 2 || N == 3) {return N;}int res = 3;int pre = 2;int pre2 = 1;int tmp = 0;int tmp2= 0;for (int i = 4; i <= N; i++) {tmp = res;tmp2 = pre;res += pre2;pre = tmp;pre2 = tmp2;}return res;}

 方法三:

C(N) = C(N-1) + C(N-3)   是三阶递推数列。

矩阵阶乘方法 matrixPower() 参考博客:斐波那契数列问题

    public static int c3(int N) {if (N < 1) {return 0;}if (N == 1 || N == 2 || N == 3) {return N;}int[][] base = {{1,1,0},{0,0,1},{1,0,0}};int[][] res = matrixPower(base, N-3);return 3*res[0][0] + 2*res[1][0] + res[2][0];}

斐波那契问题——超生的母牛相关推荐

  1. 解决斐波那契数列 (3)超生的母牛——斐波那契数列的变形

    时间限制 1000 ms 内存限制 32768 KB 代码长度限制 100 KB 判断程序 Standard (来自 小小) 题目描述 有一头母牛,它每年年初生一头小母牛.每头小母牛从第四个年头开始, ...

  2. 动态规划——斐波那契数列(70. 爬楼梯、198. 打家劫舍、213. 打家劫舍II、信件错排、母牛生产)

    递归和动态规划都是将原问题拆分成多个子问题然后求解,但是动态规划存储了子问题的解,不需要重复计算. 动态规划(Dynamic Programming,DP)需要转移方程和边界条件. 目录 一.70. ...

  3. 【递推】HDU -2018 母牛的故事斐波那契兔子数列

    函数之递归的应用 母牛的故事 (这个问题还有很多类似的,比如种树,每一年种的树品质在改变,当然区别在于树不能生孩子.. 相应的人类达到法定年龄就可以生孩子,这个和母牛问题一样,只不过时间间隔变化了. ...

  4. 母牛生小牛 斐波那契数列的变式!

    设有一头小母牛,从出生第四年起每年生一头小母牛,按此规律,第N年时有几头母牛? 输入格式 输入一个整数N.(1≤N≤50) 输出格式 第N年时母牛的数量 代码解析: 在做题之前不妨看看一道题: 题目: ...

  5. 斐波那契问题的递归和动态规划

    题目:给定整数N, 返回斐波那契数列的第N项 补充问题1:给定整数N,代表台阶数,一次可以跨2个或者1个台阶,返回有多少中走法 补充问题2:假设农场中成熟的母?每年只会省1头小母牛,并且永远不会死.第 ...

  6. 斐波那契数列数列相关简化2

    看这篇文章前先看一下第一篇文章: 斐波那契数列数列相关简化1_鱼跃鹰飞的博客-CSDN博客 根据第一篇文章总结如下: 如果某个递归,除了初始项之外,具有如下的形式 F(N) = C1 * F(N) + ...

  7. 动态规划Ⅰ:斐波那契数列

    动态规划题目类型 & 做题思路总览:动态规划解题套路 & 题型总结 & 思路讲解 文章目录 一.斐波那契数列 1. 爬楼梯问题 2. 打家劫舍系列 3. 信件错排 4. 母牛生 ...

  8. 斐波那契数列兔子繁殖问题相关思考

    斐波那契数列的一个典型应用就是兔子繁殖问题. 一.最朴素的兔子繁殖问题就是:有一只兔子,从出生后第3个月起每个月都生一只兔子,小兔子长到第三个月后每个月又生一只兔子,假如兔子都不死,问第n个月的兔子总 ...

  9. 斐波那契数列系列算法最优复杂度-------O(logN)

    斐波那契数列系列算法最优复杂度--时间复杂度优化到O(LogN) 对于菲薄那契系列问题的探讨很多,下面就以两个例子来分析: 案例 一: 在迷迷糊糊的大草原上,小红捡到了n根木棍,第i根木棍的长度为i, ...

最新文章

  1. golang byte转string_golang系列——实战http服务器
  2. devc++64位不兼容_DNF玩家遭强制脱坑,只因64位更新后无法上游戏,如何解决?...
  3. qt实现-给SQLITE添加自定义函数
  4. Linux core dump的详细介绍及使用
  5. 结构体转char[]
  6. 下列哪个不是目前python里的内置模块-python中那些小众但有用的内置模块
  7. CSS学习笔记 display属性
  8. 用fft对信号进行频谱分析实验报告_示波器上的频域分析利器,Spectrum View测试分析...
  9. java 生成缩略图类_JAVA生成【缩略图】方法
  10. UTF8有BOM和无BOM
  11. Ext4文件系统修复
  12. Mapnik使用postgres中的栅格数据
  13. jquery学习之路jquery之一:jquery选择元素的方法,太神了 2012.8.2
  14. 如何查看IIS的80端口被占用?
  15. Sublime Text 2删除行尾空格
  16. 微信小程序学习总结(一)——程序文件内容
  17. mac M1 下安装docker 及相关镜像
  18. Radius认证协议(六)报文属性
  19. 常用的几种视频格式(最详细的解释)
  20. 2-1个人小程序注册

热门文章

  1. Linux命令--iconv--使用/教程/实例
  2. 《MySQL 8.0 参考手册》第 14 章 MySQL 数据字典
  3. leach算法改进思路
  4. SAP ABAP——SAP简介(三)【S/4 HANA前端显示界面】
  5. 毫秒值与date格式的时间之间的转换
  6. 步进电机-T型加减速
  7. Sigmoid函数推导
  8. 使用python的scapy库,提供一个通过nbns获取主机名称的示例代码
  9. vue在线预览word,pdf, xls,ppt 文档
  10. 双因素方差分析全流程汇总