Bailian4108 羚羊数量-Number Of Antelope【递推+打表+递归+记忆化递归】
4108:羚羊数量-Number Of Antelope
总时间限制: 1000ms 内存限制: 65536kB
描述
草原上有一种羚羊,假设它们出生时为0岁,那么经过3年的成长,当它们在3岁的时候会成年,并开始繁殖。每一对羚羊在3岁的那一年会产下两只小羚羊,并且这对成年羚羊结为永久的伴侣,在以后的每一年又生出两只小羚羊。
假定一对羚羊产下的两只小羚羊必定为一雄一雌,羚羊在3岁时必定会找到另外一只同年羚羊结为永久伴侣,并开始繁殖。此外,假定这种羚羊在50岁以内不会死去。
如果在第0年,草原上有一对0岁的羚羊,那么第n年末草原上有多少对羚羊?
例如,第1年和第2年,草原上有1对羚羊;第3年,由于这对羚羊成年了,它们会生下一对羚羊,因此第3年末草原上有2对羚羊。
输入
第一行是一个正整数m(1<=n<=15),表示共有m个问题。
下面m行,每行是一个数字n(0<=n<=40),表示第n年。
输出
总共m行,每行一个数字,表示相应的第n年末草原上有几对羚羊。
样例输入
3
1
3
4
样例输出
1
2
3
提示
结果不会超出int范围
问题链接:Bailian4108 羚羊数量-Number Of Antelope
问题简述:(略)
问题分析:
本题类似于菲波那契数列问题,关键是递推式,前几项需要自己算出来。递推式是f(n)=f(n-3)+f(n-1)。打表是好的做法,可以减少重复计算的次数。
程序说明:(略)
参考链接:(略)
题记:(略)
AC的C语言程序(打表)如下:
/* Bailian4108 羚羊数量-Number Of Antelope */#include <stdio.h>#define N 40
int a[N + 1];void init(int n)
{int i;a[0] = 1;a[1] = 1;a[2] = 1;for(i = 3; i <= n; i++)a[i] = a[i - 3] + a[i - 1];
}int main(void)
{init(N);int m, n;scanf("%d", &m);while(m--) {scanf("%d", &n);printf("%d\n", a[n]);}return 0;
}
AC的C语言程序(递归)如下:
/* Bailian4108 羚羊数量-Number Of Antelope */#include <stdio.h>int fib(int n)
{if (n == 0) return 1;else if (n == 1) return 1;else if (n == 2) return 1;else return fib(n - 3) + fib(n - 1);
}int main(void)
{int m, n;scanf("%d", &m);while (m--) {scanf("%d", &n);printf("%d\n", fib(n));}return 0;
}
AC的C语言程序(记忆化递归)如下:
/* Bailian4108 羚羊数量-Number Of Antelope */#include <stdio.h>
#include <string.h>#define N 40
int a[N + 1];int fib(int n)
{if (a[n]) return a[n];else if (n == 0 || n == 1 || n == 2) return a[n] = 1;else {if (a[n - 3] == 0)a[n - 3] = fib(n - 3);if (a[n - 1] == 0)a[n - 1] = fib(n - 1);return a[n - 3] + a[n - 1];}
}int main(void)
{memset(a, 0, sizeof a);int m, n;scanf("%d", &m);while (m--) {scanf("%d", &n);printf("%d\n", fib(n));}return 0;
}
Bailian4108 羚羊数量-Number Of Antelope【递推+打表+递归+记忆化递归】相关推荐
- Bailian4108 羚羊数量-Number Of Antelope【递推+打表】
4108:羚羊数量-Number Of Antelope 总时间限制: 1000ms 内存限制: 65536kB 描述 草原上有一种羚羊,假设它们出生时为0岁,那么经过3年的成长,当它们在3岁的时候会 ...
- UVA10943 How do you add【递推打表】
Larry is very bad at math - he usually uses a calculator, which worked well throughout college. Unfo ...
- HDU2018 母牛的故事【递推+记忆化递归】
母牛的故事 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submiss ...
- Bailian1664 Placing apples【递推+记忆化递归】
1664:Placing apples 总时间限制: 1000ms 内存限制: 65536kB 描述 We are going to place M same apples into N same p ...
- 组合数学 —— 组合数取模 —— 逆元与递推打表
[逆元求法] 1.要求:p 是质数 2.时间复杂度:O(n) 3.求解 的步骤: 1)通过循环,预先算好所有小于 N 的阶乘(%p)的结果,存到数组 fac[] 中 (fac[i] = i!%p) ...
- HDU2501 Tiling_easy version【递推+打表】
Tiling_easy version Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) ...
- POJ1664 放苹果【递推+记忆化递归】
放苹果 Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 35209 Accepted: 21792 Description ...
- NYOJ 1076 方案数量(公式 或 递推)
方案数量 时间限制:1000 ms | 内存限制:65535 KB 难度:2 描述 给出一个N*M的棋盘,左下角坐标是(0,0),右上角坐标是(N,M),规定每次只能向上或者向右走,问从左下角走到 ...
- Bailian3258 兔子产子【递推+打表】
3258:兔子产子 总时间限制: 1000ms 内存限制: 65536kB 描述 从前有一对长寿兔子,它们每一个月生一对兔子,新生的小兔子两个月就长大了,在第二个月的月底开始生它们的下一代小兔子,这样 ...
- luogu P2216 [HAOI2007]理想的正方形 递推+ST表
题意:有一个a*b的整数组成的矩阵,现请你从中找出一个n*n的正方形区域,使得该区域所有数中的最大值和最小值的差最小. 数据规模: (1)矩阵中的所有数都不超过1,000,000,000 (2)20% ...
最新文章
- linux cpu 超频,Linux 调整 cstate 实现cpu超频
- java本地方法封装库_JNA-Java本地方法封装库
- “AlphaGo之父”获最新一届ACM计算奖
- boost::tuple用法的测试程序
- hadoop学习2 记录配置hadoop环境的那些坑
- 和宝塔可以同时安装吗_服用钙拮抗剂可以同时补钙吗
- 机器人操作系统——ROS,Robot Operating System
- Android 内存监测工具 DDMS -- Heap
- 单片机STM8S测量电压电路_50个单片机晶振问题及解决方法小结
- 解决2020R2,2022R1等版本的SCDM无法编辑草图尺寸的问题
- 体验谷歌菜市场镜像版
- Python数据字典处理Excel,并统计总数,画出饼图
- 数字信号与模拟信号的区别是什么?
- 建立了一个博客园创业者QQ群
- 一个屌丝程序猿的人生(二十六)
- CHtmlView指定IE内核
- 波束成形算法之波束宽度
- 快速上手Luminati的三个使用方法
- 手把手教你开发photoshop面板插件(附demo和工具)
- 使用x32dbg破解VB6编译的软件时间限制
热门文章
- $.extend中探索深拷贝和浅拷贝
- 我的世界玩服务器虚拟内存高崩,服务端崩溃 - 崩溃解答 - MC百科社群 - MC百科|最大的Minecraft中文MOD百科...
- 【论文翻译】Many-Class Few-Shot Learning on Multi-Granularity Class Hierarchy
- 免费在线绘制CircRNA吸附miRNA圈图
- STC8A8K64D4(51系列单片机)printf打印数据异常的问题
- 关于Android Handler同步屏障那些事
- python浙江医院抢号_医院挂号难?抢号秘籍看这里!
- 投票动态代理proxy案例(java)
- php判断某天星期几,php怎么判断指定日期是星期几?
- 基于JAVA图书商城购物系统的设计与实现