![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
//hdu 1284 母函数 // 1分的 2分的 3分的 //母函数计算:(1+x+x^2+x^3+...)*(1+x^2+x^4+...)*(1+x^3+x^6+...) //n 分钱要分解的方法则为 多项式相乘后 指数为n 的系数 #include <stdio.h> #include <string.h> #define N 35000 int ans[N], mul[N]; int main() { for(int i = 0; i < N; ++i) ans[i] = 1; //全用1分组成的方法都只有1种 for(int i = 2; i <= 3; ++i) { for(int j = 0; j < N; ++j) { //系数都为1 for(int k = 0; j+k < N; k += i) //( 1 + x^k + x^(k+i) + x^(k+2i) + ... ) { //指数分别为j 和k 的多项式相乘 得到指数为 j+k项,所以第j项乘以第k项 mul[j+k] += ans[j]; // 得到 j+k项 的系数为 j项的加上原本 j+k项的系数 } } for(int j = 0; j < N; ++j) { ans[j] = mul[j]; //把系数保存到 ans数组里 mul[j] = 0; //初始化 } } int n; while(scanf("%d", &n) != EOF) { printf("%d\n", ans[n]); } return 0; }