标签:
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 15794 Accepted Submission(s): 11138
#include <cstdio> #include <cstring> int c1[125],c2[125]; // c1[i] 表示指数为i的x的系数 即 a*x^3 中的a // c2[i] 表示两个因子相乘指数和为i时,乘积的系数 如 3*x^4 * x^5 = 3 * x^9 后面的3就是c2[9] int main() { int n; int i,j,k; while(~scanf("%d",&n)) { for(i=0;i<=n;i++) // 可以看做计算第一个括号 ( x^0 + x^1 + x^2 + ...) 每一项系数为1 { c1[i] = 1; c2[i] = 0; } for(i=2;i<=n;i++) // 计算 (前面已计算过的括号所累乘得到的 大大的括号)*(后面一个括号) { // 第一次循环就是计算 ( x^0 + x^1 + x^2 + ...)*( x^0 + x^2 + x^4 + ...) // 第二次循环计算 ( x^0 + x^1 + x^2 + x^3 + 2 * x^4 + x^5 + x^6 + ...)*( x^0 + x^3 + x^6 + ...) for(j=0;j<=n;j++) // j代表前一个括号里的每一项 for(k=0;k+j<=n;k+=i) // k代表后一个括号里的每一项 { c2[k+j] += c1[j]; // 用c2来保存乘得的结果 因为后一个括号中每一项的系数一定是1,所以可以直接 += } for(j=0;j<=n;j++) // 计算完毕后将两个括号合并成的大大括号中每一项的系数保存在c1中,c2置空 { c1[j] = c2[j]; c2[j] = 0; } } printf("%d\n",c1[n]); } }
HDU 1028 Ignatius and the Princess III(母函数)
标签:
原文地址:http://www.cnblogs.com/GY8023/p/4743213.html