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; }