有一头母牛,它每年年初生一头小母牛。每头小母牛从第四个年头开始,每年年初也生一头小母牛。请编程实现在第n年的时候,共有多少头母牛?

Sample Input
2
4
5
0
Sample Output
2
4
6

//本代码为只输入一组数据的答案
//方法1:找规律找出来a[i]=a[i-1]+a[i-3] (ps:我第一次就是这样做出来的)
//方法2:归纳出状态转移方程
//现在解释一下为什么a[i] = a[i - 1] + a[i - 3]
//假如i-1年到i年每变化,则a[i] = a[i - 1]
//可是现在要考虑新的母牛和小牛,
//然后把目光放回i-3年.
//为什么是i-1年?
//i-1年有三种牛:第一种:母牛,,,第二种:这一年刚出生的小牛,,,
//第三种:这一年之前出生的小牛,但是这种牛到了i-3年还是小牛,
//那么毫无疑问,这种青年小牛会在第i年之前成长为母牛,可是
//在i-3到i年间假设青年小牛成长为母牛,那么母牛会马上生仔,但是仔在第i年时肯定也是仔
//所以说青年小牛的仔来不及变成母牛,那么i-3年时x个青年小牛
//到第i年时他会变成x个成年小牛,再带来新的x个幼年小牛
//如果i-3年时k个幼年小牛,到第i年时他会变成k个成年小牛,再带来k个幼年小牛
//(小牛刚成熟就可以马上带来新的!!!)
//而假如i-3年有m个母牛,那么第i年会带来m个幼年小牛
//所以如果i-3年时有x+k+m只牛
//i年时则会又多了x+k+m只小牛
//所以a[i]相对于a[i - 1]多了a[i - 3]只牛
#include<bits/stdc++.h>
#define ll long long
using namespace std;
const ll maxn = ;
ll a[maxn] = {};
int main()
{
ll n;
scanf("%lld", &n); a[] = ; //第一年一头母牛
a[] = ;
a[] = ;
a[] = ;
a[] = ; //第二年出生的小牛在第五年变成了母牛,并且马上生出了一只小牛 for (ll i = ; i <= n; i++)
a[i] = a[i - ] + a[i - ];
printf("%lld", a[n]); }

最新文章

  1. HTML5学习之拖放(十)
  2. [BZOJ4632]树的编码
  3. 编译在arm板上使用的sqlite3的静动态库
  4. PHP基础 CGI,FastCGI,PHP-CGI与PHP-FPM
  5. jQuery - 实时统计输入框输入个数(中文输入法适用)
  6. 浅谈TCP优化
  7. String 、InputStream、Reader 的转换
  8. Java8新特性
  9. 导入表 IMPORT_DESCRIPTOR
  10. jquery.ajax异步发送请求的简单测试
  11. 线性规划?数学?差分约束?Good Bye 2016 C
  12. maven混淆Java代码
  13. pwnable.kr leg之write up
  14. iOS生成Bundle包及使用
  15. Java设计模式--装饰器模式到Java IO 流
  16. 一个QQ旋风的BUG
  17. html取消回车刷新提交
  18. C++解决case中不能定义局部变量问题
  19. react引入方式
  20. 使用更改跟踪(ChangeTracking)来实现数据类型变更

热门文章

  1. HDU 4445 数学-抛物运动
  2. 如何理解scrapy Selector
  3. Hibernate - Query简易
  4. ASP.NET快速开发框架之工作流引擎
  5. 【171】IDL读取HDF文件
  6. 清北考前刷题day7早安
  7. python实现对excel数据进行修改/添加
  8. Lightoj 1020 - A Childhood Game (博弈)
  9. lower_bound和upper_bound函数
  10. 树形DP Codeforces Round #135 (Div. 2) D. Choosing Capital for Treeland