(算法)母牛生小牛问题

题目:

一头刚出生的小母牛,4年后生一头小母牛,以后每年生一头,现有一头刚出生的小母牛,问20年后共有多少头牛?

思路:

列举前n年的情况:1、1、1、2、3、4、6、8、11。。。

将规律抽象成公式:

F(1)=1

F(2)=1

F(3)=1

F(n)=F(n-1)+F(n-3)

F(n):表示第n年共有多少头牛

F(n-1):表示第n-1年共有多少头牛

F(n-3):表示第(n-3)年出生的母牛在第n年生的小母牛数

解法:

从公式F(n)=F(n-1)+F(n-3) 来看,可以采用两种方法:

1、简单的递归实现(自上而下,适用于小规模的计算,否则大量的函数递归将导致栈溢出)

2、动态规划(自下而上,开辟空间保存每一步的结果,适用于大规模计算)

编程实现:

// recursive method
int NumOfCow(int n){
    if(n<=3)
        return 1;
    return NumOfCow(n-1)+NumOfCow(n-3);
}
// dynamic programming method
int NumOfCow2(int n){
    int num[n+1];
    for(int i=1;i<=n;i++){
        if(i<=3)
            num[i]=1;
        else
            num[i]=num[i-1]+num[i-3];
    }
    return num[n];
}
时间: 2024-08-02 10:42:07

(算法)母牛生小牛问题的相关文章

母牛生小牛

Description 设有一头小母牛,从出生第四年起每年生一头小母牛,按此规律,第N年时有几头母牛? Input 本题有多组数据.每组数据只有一个整数N,独占一行.(1≤N≤50).当N为0时,输入结束. Output 对每组数据,输出一个整数(独占一行)表示第N年时母牛的数量. Sample Input 1459200 Sample Output 12313872 Source 2005计算机系程序设计竞赛 分析:很明显 用Fibonacci 数列来解决,注意用3阶. 代码: #includ

母牛生仔的递归算法和非递归算法。

//一只母牛,第二年底生一只母牛和一只公牛,第三年底生一只母牛 ,第五年开始母牛会死.公牛也只能活四年.请问一个农场开始只有一只刚出生的母牛,N年后一共有多少只牛. //请写一个函数输出结果,用递归和非递归两种方法来实现. function cowrecursion($i) { if ($i == 1) //如果是第一年,则1头牛. { return 1; } elseif ($i == 2) { return 2 + cowrecursion(1); //第一母牛和儿子们+第二母牛第一年 }

MMORPG大型游戏设计与开发(服务器 游戏场景 掉落与网络连接)

时间一点点的消逝,伴着自己空闲日子将要结束的时候我尽量的学习和分享场景和AI的知识给朋友们,不过很遗憾的是这些文章还有不足的地方,就是有的难点没有完全的分析到.掉落在游戏中必不可少的,同时网络连接也是网络游戏中的核心部分,那么这两个东西又怎么和场景关联起来的? 一张截图 掉落(管理器) 1.初始化(init) 根据地图的长宽初始化掉落点数据. 2.是否可掉落(is can drop) 传入坐标返回该点是否可以掉落. 3.设置掉落点(set drop position) 传入一个坐标,并将该点设置

HDU 2018 DP

A - 母牛的故事 Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Submit Status Practice HDU 2018 Description 有一头母牛,它每年年初生一头小母牛.每头小母牛从第四个年头开始,每年年初也生一头小母牛.请编程实现在第n年的时候,共有多少头母牛? Input 输入数据由多个测试实例组成,每个测试实例占一行,包括一个整数n(0<n<55),n的

奶牛问题1

今天查看一份代码: // 奶牛问题.cpp : 定义控制台应用程序的入口点. /*母牛生小牛 Problem 设有一头小母牛,从出生第四年起每年生一头小母牛,按此规律,第N年时有几头母牛? Input 本题有多组数据.每组数据只有一个整数N,独占一行.(1≤N≤50) Output 对每组数据,输出一个整数(独占一行)表示第N年时母牛的数量 Sample Input 1 4 5 20 Sample Output 1 2 3 872 假设4年开始有1头牛,       */   #include 

算法初级面试题08——递归和动态规划的精髓、阶乘、汉诺塔、子序列和全排列、母牛问题、逆序栈、最小的路径和、数组累加成指定整数、背包问题

第八课主要介绍递归和动态规划 介绍递归和动态规划 暴力递归: 1,把问题转化为规模缩小了的同类问题的子问题 2,有明确的不需要继续进行递归的条件(base case) 3,有当得到了子问题的结果之后的决策过程 4,不记录每一个子问题的解 动态规划 1,从暴力递归中来 2,将每一个子问题的解记录下来,避免重复计算 3,把暴力递归的过程,抽象成了状态表达 4,并且存在化简状态表达,使其更加简洁的可能 图灵引入的是:我不知道怎么算,但是我知道怎么试.知道怎么暴力破解出来. 要学会,练习懂得怎么尝试.

算法&lt;初级&gt; - 第五章 递归与动规相关问题(完结)

算法<初级> - 第五章 递归与动规相关问题(完结) <一>递归和动态规划 暴力递归 转化为规模缩小了的同问题的子问题 - 时间复杂度O(2n-1) 有明确的边界条件(base case) - 先写base case,再写问题递归的过程 有得到子问题结果后决策过程 不记录每个子问题的解 - 每次求解子问题都交给递归去解决,不会在全局保存子问题的解(与动规形成对比) 动态规划DP 从暴力递归中延申 - 过程中还经历过<记忆化搜索>,相当于暴力递归+cache缓存(用has

关于图像高速缩放算法,目前看到的最好的最清晰的一篇文章

http://www.myexception.cn/image/1630385.html 关于图像快速缩放算法,目前看到的最好的最清晰的一篇文章 昨天开始写一个录制屏幕和声音存储为视频文件的程序,差不多完成了. 屏幕录制使用方法:抓屏(方法很多,BitBlt.DirectX.MirrorDriver等),缩放,X264压缩(开源的,自己封装) 声音录制使用方法:声卡采集PCM数据,AAC压缩(开源的,自己封装) 最后打包复用为MP4文件,可以使用ffmpeg或者mp4v2等. 经过断断续续一天的

若一头小母牛,从出生起第四个年头开始每年生一头母牛,按此规律,第n年时有多少头母牛?

解释还是很简单的,先明确f(n)的含义,第n年有的牛数第一个公式,不用多说,第零年(开始),第一年,第二年,第三年,都只有1头牛第四年后,牛的数量由两部分构成,去年的所有牛和所生下的小牛组成,前者就是f(n-1),应该没有异义:由于不是所有牛都能生小牛,只有3牛以前的老牛才会生小牛,而每只老牛只生一只小牛,第n年所生牛的数量就应该是f(n-3)#