问题:
有一种昆虫,每过x个月产y对卵,每对卵需要2个月才能长成成虫。假设每对成虫不死,并且每对卵刚张成成虫的第一个月不产卵(过x个月产卵)。第一个月只有一对成虫,问z个月后有多少对成虫?
分析:
题目中要求的是z个月后的成虫个数,即第z+1个月的成虫个数。我们只需定义一个数组存储每一个月成虫的个数。考虑到每个月可能会有卵变成新的成虫,所以只要另存一下每个月的新增卵的数量就可以了。
递推式即为f[x]=f[x-1]+s[x-2] (f[x]为第x个月的成虫数量,s[x]为第x个月的新增卵数量)。
代码:
#include<iostream>
#include<cstdio>
using namespace std;
long int f[55];
long int s[55];
int main()
{
int x,y,z;//x个月产y对
cin>>x>>y>>z;
f[1]=1;
for(int i=2;i<=z+1;i++)
{
f[i]=f[i-1]+s[i-2];
if(i>=x) s[i]=f[i-x]*y;
}
cout<<f[z+1]<<endl;
return 0;
}