杭电2152题母函数
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2152
#include <bits/stdc++.h>
using namespace std;
int main()
{
int a[200][2];
int b[1005],c[1005];//b为正式数组,c为临时数组
int n,m;
while(~scanf("%d%d",&n,&m))
{
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
for(int i=0;i<n;i++)
{
scanf("%d%d",&a[i][0],&a[i][1]);
}
for(int i=a[0][0];i<=a[0][1];i++)//第一个水果初始化
{
b[i]=1;
}
for(int i=1;i<n;i++)//循环n-1个水果
{
memset(c,0,sizeof(c));//c初始化为0
for(int x=0;x<=m;x++)//循环0~m个水果的次数
{
for(int y=a[i][0];y<=a[i][1]&&x+y<=m;y++)//循环第i+1个的水果
{
c[x+y]+=b[x];//每次加上前一次的组合数
}
}
for(int x=0;x<=m;x++)//将储存在c的组合数存入b数组
b[x]=c[x];
}
cout<<b[m]<<endl;
}
return 0;
}