您的位置:首页 > 其它

POJ 3046

2014-04-08 20:09 225 查看
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
[i];
ans%=1000000;
}
printf("%d\n",ans);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  poj DP