codevs 3914 昆虫繁殖

题目描述

科学家在热带森林中发现了一种特殊的昆虫,这种昆虫的繁殖能力很强。每对成虫过x个月产y对卵,

每对卵要过两个月长成成虫。假设每个成虫不死,第一个月只有一对成虫,且卵长成成虫后的第一个月不

产卵(过X个月产卵),问过Z个月以后,共有成虫多少对?

输入

x, y, z的数值(0 =< x <= 20, 1 <= y <= 20, x =< z <= 50)

输出

过Z个月以后,共有成虫对数

样例输入

1 2 8

样例输出

37

 

解题思路:

这道题,题目读起来比较拗口...分析可得如下关系:

第n个月的成虫 = 第n - 1个月的成虫 + 第n - 2个月的幼虫;

第n - 2个月的幼虫 = y * (第n - 2 - x 个月的成虫);

最终可得:F[n] = F[n - 1] + F[n - 2 - x] ;

AC代码:

#include<iostream>
using namespace std;
typedef long long ll; 
ll f[1001];
int main(){
	int x, y, z;
	cin >> x >> y >> z;
	for(int i = 1; i <= x; i++){	// 在才开始的x个月之前,成虫未产卵 
		f[i] = 1;	//所以 数量为 1 
	}
	for(int i = x + 1; i <= z + 1; i++){
		f[i] = f[i - 1] + y * f[i - 2 - x];
	}
	cout << f[z + 1] << endl; //  过了z个月 
	return 0;
}
扫描二维码关注公众号,回复: 5836862 查看本文章

注意点:

  1. 这道题需要long long;
  2. 才开始的x个月, 成虫的数量一直为1;
  3. 过了z个月,算的是z + 1个月的成虫数量;

猜你喜欢

转载自blog.csdn.net/weixin_42522886/article/details/89182457
今日推荐