开始有1对仓鼠,一个月之后成熟,之后每个月可以生一对,m个月之后会死掉(死之前会先生一对)
问n个月之后总共有多少对仓鼠
#include <iostream>
#include <cstring>
#include <string>
#include <cstdio>
#include <cmath>
#include <algorithm>
#include <vector>
#include <queue>
#include <map>
#define inf 0x3f3f3f3f
#define ll long long
#define mod 1000000007
using namespace std;
ll ans,q[10010];
int main()
{
int n,m,head,tail;
while(~scanf("%d%d",&n,&m))
{
head=tail=0;
ans=0;
q[tail++]=1;
for(int i=0;i<n;i++)
{
q[tail++]=ans;//昨天所有成年的 就是今天出生的
ans=(ans+q[tail-2])%mod;//加上前天出生的 就是今天已经可生育的
if(tail-head>m+1)//减去m+1天前那天出生的(挂了)
{
ans-=q[head];
head++;
}
ans=(ans+mod)%mod;//上一个if里面可能减成负的
}
printf("%lld\n",(ans+q[tail-1])%mod);//可生育的加上昨天出生的
}
return 0;
}