题意:一个由’1‘,‘2’组成的长度为n的字符串,要求连续的1不超过a个,连续的2不超过b个,求满足条件的字符串的数量,答案模1e9+7;
思路:dp[i][j]表示长度为i,以j结尾,满足条件的字符串的数量;
#include<bits/stdc++.h>
using namespace std;
const int Mod=1e9+7;
long long dp[50005][2];
int main(){
int n,a,b;
scanf("%d%d%d",&n,&a,&b);
dp[0][0]=1;
for(int i=1;i<=n;i++){
long long sum=(dp[i-1][0]+dp[i-1][1])%Mod;
if(i<=a) dp[i][0]=sum;
else if(i==a+1)dp[i][0]=(sum-1)%Mod;
else dp[i][0]=(sum-dp[i-a-1][1])%Mod;
if(i<=b)dp[i][1]=sum;
else if(i==b+1)dp[i][1]=(sum-1)%Mod;
else dp[i][1]=(sum-dp[i-b-1][0])%Mod;
}
long long sum=((dp[n][0]+dp[n][1])%Mod+Mod)%Mod;
printf("%lld\n",sum);
return 0;
}