poj 3046

母函数。

代码:

#include<iostream>
#include<fstream>

using namespace std;

int t,n,s,b;
int dp[100001];
int a[1001];

void read(){
//	ifstream cin("in.txt");
	int i,j,k,right,end;
	cin>>t>>n>>s>>b;
	for(i=1;i<=n;i++)
	{
		cin>>j;
		a[j]++;
	}
	right=0;
	dp[0]=1;
	for(i=1;i<=t;i++)
	{
		end=right;
		for(j=end;j>=0;j--)
			if(dp[j]>0)
			{
				k=a[i];
				while(j+k>b) k--;
				for(;k>=1;k--)
				{
					dp[j+k]+=dp[j];
					dp[j+k]%=1000000;
					if(j+k<=b&&j+k>right) right=j+k;
				}
			}
	}
	j=0;
	for(i=s;i<=b;i++)
	{
		j+=dp[i];
		j%=1000000;
	}
	cout<<j<<endl;

}

int main(){
	read();
	return 0;
}

posted on 2011-03-28 12:21  宇宙吾心  阅读(362)  评论(0)    收藏  举报

导航