hdu 2152 Fruit

嘿嘿,又一道母函数

不过这个没办法直接用之前大致的模板,因为之前的G(x)=(1+x+x^2)*(1+x^2+x^4)……

每一个括号都有一个1,所以我没有将数组num1[]重新置为0,而现在G(x)=(x^a1+x^(a1+1)+……+x^b1)*(x^a2+x^(a2+1)+……+x^b2)……

#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
int maxn,n,m;
struct neg
{
	int a,b;
}c[110];
int num1[110],num[110];
void sovle()
{
	memset(num,0,sizeof(num));
	memset(num1,0,sizeof(num1));
	num[0]=1;
	for(int i=1;i<=n;i++)  
    { 
		for(int k=c[i].a;k<=c[i].b;k++)
			for(int j=0;j<=maxn;j++)
			{
				if(j+k>m) break;
				num1[k+j]+=num[j];
			}
		for(int j=0;j<=m;j++)  
		{
            num[j]=num1[j];  
			num1[j]=0;
		}
    }  
}
int main()
{
	while(scanf("%d %d",&n,&m)==2)
	{
		maxn=0;
		for(int i=1;i<=n;i++)
		{
			scanf("%d %d",&c[i].a,&c[i].b);
			maxn+=c[i].b;
		}
		sovle();
		printf("%d\n",num[m]);
	}
	return 0;
}
原文地址:https://www.cnblogs.com/nanke/p/2233647.html