http://acm.timus.ru/problem.aspx?space=1&num=2018ios
真心愛過,怎麼能完全忘掉spa
題目大意:blog
長度爲n的串,由1和2組成,連續的1不能超過a個,連續的2不能超過b個ci
dpa[i] 表示長度爲i時以a爲結尾的串的個數,dpb[i] 相似string
求dpa[i]時 須要枚舉結尾a的個數就能夠了 dpb[i] 相似io
#include <iostream> #include <stdio.h> #include <stdlib.h> #include <io.h> #include <string.h> using namespace std; const int N=50001; const int M=301; const unsigned int MOD=1000000007; unsigned int dpa[N]; unsigned int dpb[N]; int main() { //freopen("data.in","r",stdin); memset(dpa,0,sizeof(dpa)); memset(dpb,0,sizeof(dpb)); int n,a,b; cin>>n>>a>>b; dpa[0]=dpb[0]=1; for(int i=1;i<=n;++i) { for(int j=1;j<=a&&j<=i;++j) { dpa[i]=(dpa[i]+dpb[i-j])%MOD; } for(int j=1;j<=b&&j<=i;++j) { dpb[i]=(dpb[i]+dpa[i-j])%MOD; } } cout<<((dpa[n]+dpb[n])%MOD)<<endl; return 0; }