母函数
2015-06-14 11:01
211 查看
记录点滴。
/* 2015.6 HT ACM Work10 */ #include <iostream> #include <cstdio> #include<cstring> using namespace std; /* Ignatius and the Princess III For example, assume N is 4, we can find: 4 = 4; 4 = 3 + 1; 4 = 2 + 2; 4 = 2 + 1 + 1; 4 = 1 + 1 + 1 + 1; so the result is 5 when N is 4. Note that "4 = 3 + 1" and "4 = 1 + 3" is the same in this problem. 本题母函数:G(x)=(1+x+x2+x3+x4+…)(1+x2+x4+x8+…)(1+x3+x6+x9+…)… 从第一个括号开始算起,先把第一个括号跟第二个括号相乘,然后这两个括号就合并了,然后又把第一个括号跟第二个括号相乘, 直到n个括号全部被算出来 (i就代表第几个括号正在被合并) m2[j + k] += m1[j] j 代表大括号中的第j项,而k就代表大括号后面那个括号中的第k项 (也可把k叫做第i个括号中的第k项) k = k + i 因为大括号后面那个括号中每两项之间相差x^i,所以k每次都要加i,这样大括号中第j项乘的就全是后面那个括号中的 m2[j + k] 第j项,第k项相乘后就得到第j+k项 */ //// m1[i]记录第i个x次方数的系数 m2[] temp //int m1[256], m2[256]; // //void GF(int n) //{ // for (int i = 0; i <= n; ++i) // { // m1[i] = 1; // m2[i] = 0; // } // // // 总共有n个括号,从第2个起每一个括号都要和前面那一个括号相乘 // for (int i = 2; i <= n; ++i) // { // // j代表最前面这个大括号的项数 // for (int j = 0; j <= n; ++j) // // k+j <= n 根据题意求得x^n项前即可 // for (int k = 0; k + j <= n; k += i) // m2[j + k] += m1[j]; // // for (int j = 0; j <= n; ++j) // { // m1[j] = m2[j]; // m2[j] = 0; // } // } //} // //int main() //{ // int n; // while (scanf_s("%d", &n) != EOF) // { // GF(n); // cout << m1 << endl; // } // return 0; //} /* Square Coins 1-credit coins, 4-credit coins, 9-credit coins, ..., and 289-credit coins 本题母函数:G(x)=(1+x+x2+x3+x4+…)(1+x4+x8+x12+…)(1+x9+x18+x27+…)… */ // m1[i]记录第i个x次方数的系数 m2[] temp int m1[302], m2[302]; void GF(int n) { for (int i = 0; i <= n; ++i) { m1[i] = 1; m2[i] = 0; } // 17^2 = 289 改为 i < 17 也可以 for (int i = 2; i <= 17; ++i) { for (int j = 0; j <= n; ++j) for (int k = 0; k + j <= n; k += i*i) m2[j + k] += m1[j]; for (int j = 0; j <= n; ++j) { m1[j] = m2[j]; m2[j] = 0; } } } int main() { int n; while (scanf_s("%d", &n) != EOF) { if (n == 0) break; GF(n); cout << m1 << endl; } return 0; }
相关文章推荐
- 丑数
- 有深度,面试有用的题
- C++:模板实参推断及引用折叠
- boost内存管理机制
- java基础 第5章 隐藏实施过程
- respondsToSelector使用
- 图形处理(十)测地极坐标参数化
- BZOJ 1787: [Ahoi2008]Meet 紧急集合( 树链剖分 )
- 08Exchange Server 2010跨站点部署-输入产品密钥
- SpringMVC上传文件
- java并发编程第四章 线程执行器(1)
- java HotSpot 内存管理白皮书
- 10110 - Light, more light
- 2015陕西 并查集
- 使用Google CPU Profiler对C/C++多线程程序做性能剖析
- 2015陕西 并查集
- C++ 虚函数 剖析
- UVA11992:Fast Matrix Operations(线段树)
- hdu 1250 Hat's Fibonacci
- 【leetcode】Gas Station