在一个1*N的格子上,每个格子可以选择涂成红色或蓝色。 求至少 M 个连续为红色的方案数。
标签:des class blog string os set
在一个1*N的格子上,每个格子可以选择涂成红色或蓝色。 求至少 M 个连续为红色的方案数。
多组输入,每组输入包含两个整数M和N (0<N,M<100000)
输出存在至少连续M个为红色的方案数,对1000000007取模
#include<iostream>
#include <stdio.h>
#include <math.h>
#include<stdio.h>
#include<string.h>
using namespace std;
const int MOD=1e9+7;
int main()
{
long long f[100000];int i,n,m;
long long g[100000];
int number;
while(scanf("%d%d",&m,&n)!=EOF)
{ memset(f,0,sizeof(f));
memset(g, 0,sizeof(g));
f[0]=1;
for(i=1;i<=n;i++)
{
if(i<m)
{
f[i]=2*f[i-1];
f[i]%=MOD;
g[i]=0;
}
if(i==m)
{
f[i]=2*f[i-1]-1;
f[i]%=MOD;
g[i]=1;
}
if(i>m)
{
f[i]=2*f[i-1]-f[i-m-1]+MOD;
f[i]=f[i]%MOD;
g[i]=2*g[i-1]+f[i-m-1]+MOD;
g[i]=g[i]%MOD;
}
}
for(i=1;i<=n;i++)
{
printf(" g[%d]=%d f[%d]=%d \n",i,g[i],i,f[i]);
}
cout<<g[n]%1000000007<<endl;
// cout<<" "<<m+n<<endl;
}
return 0;
}
标签:des class blog string os set
原文地址:http://www.cnblogs.com/zhko11993/p/3806907.html