开始有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; }
wustoj 1283 Hamster,布布扣,bubuko.com
原文:http://blog.csdn.net/u011032846/article/details/22516231