—> 昆虫繁殖

昆虫繁殖
过z个月以后,也就是第z+1个月

分析:
f[i]表示第i月的成虫数目的话
想要找出一个只含有f的递推式是很困难的,
比如f(i) = [f(i - 1) + f(i - 2) + f(i - 3) + … + f(i - x)] * y就是错误的
因为“每对卵要过两个月长成成虫”
添加一个辅助数组e,e[i]表示第i月的卵的数目,从而得到两个公式:
e[i] = f[i - x] * y;
f[i] = f[i - 1] + e[i - 2];
注意初始条件:f[1] ~ f[x] = 1

#include<iostream>
#include<algorithm>
#include<cstdio>

using namespace std;

long long a[51];	//保存每个月成虫的对数 
long long b[51];	//保存每个月卵的对数 

int main()
{
	int x,y,z;
	cin>>x>>y>>z;
	
	//第1个月到第x个月都只有一对成虫,没有卵 
	for(int i=1;i<=x;i++)
	{
		a[i] = 1;
		b[i] = 0;
	} 
	
	for(int i=x+1;i<=z+1;i++)
	{
		b[i] = a[i-x]*y;	
		//第i个月卵的对数 等于 x个月以前成虫对数的y倍 
		a[i] = a[i-1] + b[i-2];	
		//第i个月成虫的对数 等于  第i-1个月成虫的对数 加上 2个月以前卵的对数 
	}
	
	cout<<a[z+1]<<endl;
	
	return 0;
}

涉及到数组越界:
昆虫繁殖
昆虫繁殖
昆虫繁殖

相关文章: