HUST 1422

来源:互联网 发布:法院速录员听打软件 编辑:程序博客网 时间:2024/05/22 13:53

题目链接:

http://acm.hust.edu.cn/problem/show/1422

题解:

母函数

代码:

#include <cmath>#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>using namespace std;#define met(a,b) memset(a,b,sizeof(a))#define inf 0x3f3f3f3fconst int maxn = 1e4+10;const int mod =10000007;int dp1[maxn],dp2[maxn];int main(){    int t;    int id=1;    scanf("%d",&t);    while(t--)    {        int n,m;        scanf("%d%d",&n,&m);        met(dp1,0);        met(dp2,0);        int x,y;        scanf("%d%d",&x,&y);        int MAX=0,MIN=0;        for(int i=x;i<=y;i++)            dp1[i]=1;        MAX+=y;        MIN+=x;        for(int i=2;i<=n;i++)        {            scanf("%d%d",&x,&y);            for(int k1=MIN;k1<=MAX&&k1<=m;k1++)            {                for(int k2=x;k2<=y&&k1+k2<=m;k2++)                {                    dp2[k1+k2]=(dp2[k1+k2]+dp1[k1])%mod;                }            }            MIN+=x;            MAX+=y;            for(int k=MIN;k<=MAX&&k<=m;k++)            {                dp1[k]=dp2[k];                dp2[k]=0;            }        }        printf("Case #%d: ",id++);        printf("%d\n",dp1[m]%mod);    }}
0 0
原创粉丝点击