题目描述
科学家在热带森林中发现了一种特殊的昆虫,这种昆虫的繁殖能力很强。每对成虫过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 查看本文章
注意点:
- 这道题需要long long;
- 才开始的x个月, 成虫的数量一直为1;
- 过了z个月,算的是z + 1个月的成虫数量;