科学家在热带森林中发现了一种特殊的昆虫,这种昆虫的繁殖能力很强。每对成虫过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;
}