POJ 3046

来源:互联网 发布:中国遥感卫星数据现状 编辑:程序博客网 时间:2024/06/05 20:16
DP
#include<stdio.h>#include<string.h>int dp[1005][10050];//dp[i][j]表示前i种蚂蚁凑成集合个数为j时的方案数;int num[10050];//记录不同蚂蚁种类的数量;int main(){    int n,m,a,b,x;    while(scanf("%d%d%d%d",&n,&m,&a,&b)!=EOF){        memset(num,0,sizeof(num));        for(int i=0;i<m;i++){            scanf("%d",&x);            num[x]++;        }        memset(dp,0,sizeof(dp));        for(int i=0;i<=num[1];i++) dp[1][i]=1;        for(int i=2;i<=n;i++){            for(int j=0;j<=b;j++){//数量小于等于b;                for(int k=0;k<=num[i];k++){                    if(j>=k) {                    dp[i][j]+=dp[i-1][j-k];//动态转移方程;                    dp[i][j]%=1000000;                    }                }            }        }        int ans=0;        for(int i=a;i<=b;i++){            ans+=dp[n][i];            ans%=1000000;        }        printf("%d\n",ans);    }    return 0;}

0 0
原创粉丝点击