shu_1572 涂色游戏

来源:互联网 发布:java可变参数 定义 编辑:程序博客网 时间:2024/04/29 21:21

http://202.121.199.212/JudgeOnline/problem.php?cid=1076&pid=7   


分析: f[ i ]的含义与核电站问题是一致的;

            dp[ i ] 则为至少M个连续红色的方案,

            dp[ i ] =0                                   i<m;

            dp[ i ]=1                                    i==m;

            dp[ i ]=2*dp[ i ]+f[ i-m-1 ]        i>m;


代码:

#include <stdio.h>#include <string.h>#define MOD 1000000007#define MAXN 100000#define ll long long int m,n;ll f[MAXN],dp[MAXN]; int main(){    //freopen("in.txt","r",stdin);     while(scanf("%d%d",&m,&n)!=EOF){         memset(f,0,sizeof(f));         memset(dp, 0,sizeof(dp));         f[0]=1;         for(int i=1;i<=n;i++){             if(i<m){                f[i]=(2*f[i-1])%MOD;                dp[i]=0;             }             if(i==m){                f[i]=(2*f[i-1]-1)%MOD;                dp[i]=1;             }             if(i>m){                f[i]=(2*f[i-1]-f[i-m-1]+MOD)%MOD;                dp[i]=(2*dp[i-1]+f[i-m-1]+MOD)%MOD;             }        }        printf("%lld\n",dp[n]);    }    return 0;}


 


0 0