//用x^m项的系数表示组合数
int n,m;
int c[200],d[200],a[200],b[200];
//第i个多项式:x^ai+x^(ai+1)......x^bi
int cal(){for(int i=0;i<=m;i++)c[i]=d[i]=0;//c,d为系数数组 for(int i=a[1];i<=b[1];i++)c[i]=1;//x^a1+x^a2+....x^b1(首个多项式) for(int i=2;i<=n;i++){//第i个生成函数(多项式) for(int j=0;j<=m;j++){//1+x+x^2+x^3....+x^m(大于m的无法卷积得到x^m) //表示首个多项式(1+x+x^2.....x^m)(前面一些项系数可能是0) for(int k=a[i];k<=b[i];k++){//表示第i个多项式 (x^ai) 分别乘以 (1+x+x^2+..x^m) d[j+k]+=c[j];//得到项的系数 }} for(int j=0;j<=m;j++){c[j]=d[j];d[j]=0;//两个多项式卷积得到的系数 }}return c[m];
}