嘿嘿,又一道母函数
不过这个没办法直接用之前大致的模板,因为之前的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; }