杭电2152题母函数

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

猜你喜欢

转载自blog.csdn.net/qq_39905917/article/details/84502166
今日推荐