2021-02-04:第一年农场有1只成熟的母牛A,往后的每年:①每一只成熟的母牛都会生一只母牛 ②每一只新出生的母牛都在出生的第三年成熟 ③每一只母牛永远不会死 。请问N年后牛的数量是多少 ?
福哥答案2021-02-04:

举例:
N=6,第1年1头成熟母牛记为a;
第2年a生了新的小母牛,记为b,总牛数为2;
第3年a生了新的小母牛,记为c,总数为3;
第4年a生了新牛d,总数4;
第5年b成熟了,ab分别生了一只,总数为6;
第6年c也成熟了,abc分别生了一只,总数为9,故返回9.

递推式是f(n)=f(n-1)+f(n-3)。

如果某个递归,除了初始项之外,具有如下的形式:
F(N) = C1 * F(N) + C2 * F(N-1) + … + Ck * F(N-k) ( C1…Ck 和k都是常数)。
并且这个递归的表达式是严格的、不随条件转移的。那么都存在类似斐波那契数列的优化,时间复杂度都能优化成O(logN)。

代码用golang编写,代码如下:

package main

import "fmt"

func main() {
fmt.Println(c3(6))
}
func c3(n int) int {
if n < 1 {
return 0
}
if n == 1 || n == 2 || n == 3 {
return n
}
base := [][]int{
{1, 1, 0},
{0, 0, 1},
{1, 0, 0}}
res := matrixPower(base, n-3)
return 3*res[0][0] + 2*res[1][0] + res[2][0]
} //矩阵的p次方
func matrixPower(m [][]int, p int) [][]int {
mLen := len(m)
m0Len := len(m[0])
res := make([][]int, mLen)
for i := 0; i < mLen; i++ {
res[i] = make([]int, m0Len)
} for i := 0; i < mLen; i++ {
res[i][i] = 1
} tmp := m
for ; p != 0; p >>= 1 {
if p&1 != 0 {
res = muliMatrix(res, tmp)
}
tmp = muliMatrix(tmp, tmp)
}
return res
} //两个矩阵相乘
func muliMatrix(m1 [][]int, m2 [][]int) [][]int {
m1Len := len(m1)
m20Len := len(m2[0])
m2Len := len(m2)
res := make([][]int, m1Len)
for i := 0; i < m1Len; i++ {
res[i] = make([]int, m20Len)
} for i := 0; i < m1Len; i++ {
for j := 0; j < m20Len; j++ {
for k := 0; k < m2Len; k++ {
res[i][j] += m1[i][k] * m2[k][j]
}
}
} return res
}

  

执行结果如下:

***
[答案参考左神的java代码](https://github.com/algorithmzuo/algorithmbasic2020/blob/master/src/class26/Code02_FibonacciProblem.java)
[评论](https://user.qzone.qq.com/3182319461/blog/1612393428)

2021-02-04:第一年农场有1只成熟的母牛A,往后的每年:①每一只成熟的母牛都会生一只母牛 ②每一只新出生的母牛都在出生的第三年成熟 ③每一只母牛永远不会死 。请问N年后牛的数量是多少 ?的更多相关文章

  1. Java程序设计(2021春)——第一章续笔记与思考

    Java程序设计(2021春)--第一章续笔记与思考 目录 Java程序设计(2021春)--第一章续笔记与思考 Java数据类型 基本数据类型 引用类型 基本数据类型--整数类型的细节 基本数据类型 ...

  2. Java程序设计(2021春)——第一章课后题(选择题+编程题)答案与详解

    Java程序设计(2021春)--第一章课后题(选择题+编程题)答案与详解 目录 Java程序设计(2021春)--第一章课后题(选择题+编程题)答案与详解 第一章选择题 1.1 Java与面向对象程 ...

  3. 2021.11.04 P1392 取数(多路归并)

    2021.11.04 P1392 取数(多路归并) P1392 取数 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 题意: 在一个n行m列的数阵中,你须在每一行取一个数(共n个数) ...

  4. 137 Single Number II 数组中除了一个数外,其他的数都出现了三次,找出这个只出现一次的数

    给定一个整型数组,除了一个元素只出现一次外,其余每个元素都出现了三次.求出那个只出现一次的数.注意:你的算法应该具有线性的时间复杂度.你能否不使用额外的内存来实现?详见:https://leetcod ...

  5. 2022.02.04 Day1

    前言 为日后的算法面试做准备,自己也很喜欢算法这个东西,每天3~5道题. 刷题 1.leetcode 209 长度最下的子数组 题目 长度最下的子数组 大致的意思是从数组中找到长度最小的数组,并且数组 ...

  6. [2017.02.04] C++学习记录(1)

    编编程语言的目的是帮助程序员以代码的形式表述ideas.编程语言一方面为程序员提供一组关于可以做什么的抽象,另一方面为程序员提供可以被机器执行的轮子.C++编程语言,支持4种编程范式:过程式(Proc ...

  7. Java学习04 (第一遍)

    封装.抽象.继承和多态.封装:在面向对象语言中,封装特性是由类来体现的,我们将现实生活中的一类实体定义成类,其中包括属性和行为(在Java中就是方法),就好像人类,可以具有name,sex,age等属 ...

  8. 2021.05.04【NOIP提高B组】模拟 总结

    T1 题目大意, \(S_{i,j}=\sum_{k=i}^j a_k\) ,求 \(ans=\min\{ S_{i,j}\mod P|S_{i,j}\mod P\ge K \}\) 其中 \(i\l ...

  9. C语言学习记录_2019.02.04

    逻辑性变量的定义符:bool,在C语言中只有true和false: 定义方式:bool t = true; 逻辑运算符: !:逻辑非 &&:逻辑与 ||:逻辑或 表达区间的错误形式:4 ...

  10. 2021.02.21cf补题

    B. National Project 题意:总长度为n的公路进行维修,天气是有规律性的,连续g天的好天气,连续b天的坏天气,必须在好天气进行维护,问至少维护n的一半,那么至少需要多少天 思路:必须是 ...

随机推荐

  1. What is UDS Service 0x10 - Diagnostic Session Control ?

    Why need the UDS Service 0x10? ECU在正常工作时会处于某一个会话模式下,上电后会自动进入默认会话模式,所以ECU启动后我们不需要输入0x10 01来进入该会话模式.EC ...

  2. webgl 系列 —— 渐变三角形

    其他章节请看: webgl 系列 渐变三角形 本文通过一个渐变三角形的示例逐步分析:varying变量.合并缓冲区.图形装配.光栅化.varying 内插 绘制三个点v1 需求:绘制三个相同颜色的点, ...

  3. ISCC 2022 RE

    ISCC 2022 RE 练武题 Amy's Code v9=[0]*20 v9[0] = 149 v9[1] = 169 v9[2] = 137 v9[3] = 134 v9[4] = 212 v9 ...

  4. python代码换行问题(用‘\’来达成)

    在 Python 中,可以使用反斜杠符号 '\' 来表示代码换行,从而实现在代码中进行换行,并保持语句的完整性.例如:. # 使用反斜杠符号进行换行 result = 10 + \ 20 + \ 30 ...

  5. P4555 最长双回文串 解题报告

    看到回文串,于是就想到了马拉车. 马拉车可以帮我们求出每个 \(i\) 的最大扩展距离,容易得出,双回文串就是两个回文串拼一起.当然,两个回文串必须要相交,不然形不成一个字符串. 有的小可爱就会想直接 ...

  6. 协程 + epoll 的两个小例子

    getcontext/setupcontext/swapcontext/setcontext 方式的协程实现 #include <stdio.h> #include <stdlib. ...

  7. IDEA集成Gitee

    配置Git 在设置里面点击Git,点击选择git安装目录下的bin目录下的git.exe,点击Test,出现版本号,证明配置成功. 配置码云 在设置里面按照下图步骤,即可成功配置码云 安装Gitee插 ...

  8. 这几个SQL语法的坑,你踩过吗

    本文已经收录到Github仓库,该仓库包含计算机基础.Java基础.多线程.JVM.数据库.Redis.Spring.Mybatis.SpringMVC.SpringBoot.分布式.微服务.设计模式 ...

  9. 【Note】(坑)一些组合恒等式的实际意义理解(和待填坑的组合数学知识)

    目录 排列组合 恒等式 (1) \(C_n^m=C_n^{n-m}\) (2) \(A_n^m+mA_n^{m-1}=A_{n+1}^m\) (3) \(C_n^{m-1}+C_n^{m}=C_{n+ ...

  10. 由ASP.NET Core读取Response.Body引发的思考

    前言 前几天有群友在群里问如何在我之前的文章<ASP.NET Core WebApi返回结果统一包装实践>的时候有点疑问,主要的疑问点就是关于Respouse的读取的问题.在之前的文章&l ...