昆虫繁殖问题,怎么做都不到满分,请各位看看

科学家在热带森林中发现了一种特殊的昆虫,这种昆虫的繁殖能力很强。每对成虫过x个月产y对卵,每对卵要过两个月长成成虫。假设每个成虫不死,第一个月只有一对成虫,且卵长成成虫后的第一个月不产卵(过X个月产卵),问过Z个月以后,共有成虫多少对?0≤X≤20,1≤Y≤20,X≤Z≤50。

格式
输入格式
x,y,z的数值。
输出格式
过Z个月以后,共有成虫对数。
样例
输入样例
1 2 8
输出样例
37

#include<iostream>
#include<cstdio>
using namespace std;
int main()
{
    //freopen("a.txt","r",stdin);
    int a,b,c;
    while(cin>>a>>b>>c)
    {
        __int64 ch[],j[];                  //分别代表成虫数和净产卵数
        for(int i=;i<a;i++) {ch[i]=; j[i]=;}
        for(int i=a;i<=c;i++)
        {
            if(i->=) ch[i]=ch[i-]+j[i-];   //此月的成虫数=上个月的成虫数+2个月前的净产卵量
            else ch[i]=ch[i-];
            j[i]=ch[i-a]*b;                   //此月的净产卵量=a个月前的成虫量×每对虫一次产卵的数量
        }
        cout<<ch[c]<<endl;
    }
    return ;
}  

望采纳

#include <stdio.h>
#include <math.h>
int main() {
    int x,y,z,i;
    scanf("%d%d%d",&x,&y,&z);
    int c1[z+1]={0},c2[z+1]={0},c3[z+1]={0};
    c1[0]=1;c1[1]=1;
    for(i=0;i<=z;i++){
        if(i%x==0&&i!=0){
            c2[i]=c1[i-x]*y;
        }
        if(i>=2){
            c3[i]=c2[i-2];
        }
        if(i>=2){
            c1[i]=c1[i-1]+c3[i];
        }
    }
    printf("%d",c1[z]);
}