描述
一对小兔子n年后成为大兔子,一对大兔子每m年生出一对小兔子,大兔子k年后进入老年,老兔子f年后死亡,第1年有1对小兔子,求第e年时小兔子,大兔子,老兔子,死亡的兔子各有多少只
输入描述
正整数n,m,k,f,e(1<=n,m,k,f,e<=167089)
输出描述
四个数,在第e年小兔子,大兔子,老兔子,死亡的兔子各有多少只
样例描述
输入1: 输出1:
2 1 3 5 1 1 0 0 0
输入2: 输出2:
2 1 3 5 3 0 1 0 0
输入3: 输出3:
1 2 3 4 5 0 1 1 0
#include <iostream>
using namespace std;
const int eee=1e5+1e4+1e3+1e2+1;
int a[eee]={1},b[eee],c[eee],d[eee],n,m,k,f,e;
main()
{
cin>>n>>m>>k>>f>>e;
e--;
for(int i=1;i<=e;i++)
{
a[i]=a[i-1]+b[i-1]/m-a[i-n];
b[i]=a[i-n]+b[i-1]-b[i-k];
c[i]=c[i-1]+b[i-k]-c[i-f];
d[i]=c[i-f]+d[i-1];
}
cout<<a[e]<<' '<<b[e]<<' '<<c[e]<<' '<<d[e];
}
/*问题主要是除了e之外的四个数quzhi>=2时有多余的操作,就比如n=2,幼年到成年在e=4情况按递推式如下
e 1 2 3 4
a 1 1 0 1
b 0 0 1 2
这里e=2时的b[3]与b[4]加上的是同一只兔子,同样,大兔-老兔,老兔到死亡都有这个问题*/