科学家在热带森林中发现了一种特殊的昆虫,这种昆虫的繁殖能力很强。每对成虫过x个月产y对卵,每对卵要过两个月长成成虫。假设每个成虫不死,第一个月只有一对成虫,且卵长成成虫后的第一个月不产卵(过X个月产卵),问过Z个月以后,共有成虫多少对?0≤X≤20,1≤Y≤20,X≤Z≤50
输入
x,y,z的数值
输出
过Z个月以后,共有成虫对数
样例输入 Copy
1 2 8
样例输出 Copy
37
#include<bits/stdc++.h> using namespace std; long long small1[55],small2[55],big[55]; int main() { int x,y,z; cin >>x>>y>>z; for(int i=1;i<=x;i++) //x个月前,都只有一个大虫 { big[i] = 1; small1[i] = 0; small2[i] = 0; } for(int i=x+1;i<=z+1;i++){ big[i]=big[i-1]+small2[i-1]; //成虫等于上一次的成虫+上个月是第二个月的幼虫 small1[i]=big[i-x]*y; //第一个月的幼虫是上个月成虫乘以单数 small2[i]=small1[i-1]; } cout << big[z+1]<<endl; }