hdu1398 普通母函数的应用 解决多重集组合问题
这个题的意思是给你1^2 2^2 3^2 ... 17^2这17个数, 为你组成i的方案数有多少个, 可以通过普通母函数来求解, 系数就代表方案数, (1+x+x^2+...x^300)(1+x^2+)..., 代码如下:
#include <iostream> #include <algorithm> using namespace std; int num1[300+10], num2[300+10]; void init() { for(int i=0; i<=300; i++) num1[i]=1, num2[i]=0; for(int i=2; i<=17; i++) { for(int j=0; j<=300; j++) //aj*x^j * x^k for(int k=0; k+j<=300; k+=i*i) num2[j+k] += num1[j]; for(int i=0; i<=300; i++) num1[i]=num2[i], num2[i]=0; } } int main() { init(); int n; while(cin>>n) { if(n==0) break; cout<<num1[n]<<endl; } return 0; }