HDOJ-1028-Ignatius and the Princess III 解题报告

来源:互联网 发布:linux禅道8.1安装教程 编辑:程序博客网 时间:2024/05/11 02:59

       普通母函数基础题。题意:对于整数拆分问题,4有如下几种拆法

4 = 4

4 = 3 + 1

4 = 2 + 2

4 = 2 + 1 + 1

4 = 1 + 1 + 1 + 1

其中3 + 1和1 + 3属于同一种拆法。

现在给你一个数,问这个数有几种拆法。


       我的解题思路:普通母函数题,令数字为x的指数,那么可以构造出母函数(1 + x + x^2 + ...)(1 + x^2 + x^4 + ...)...,

算出母函数序列后,x^n的系数就是n能被拆分的方法数了。


       我的解题代码:

#include <cstdio>#include <cstdlib>#include <cstring>#include <cctype>#include <cmath>#include <algorithm>#include <vector>#include <queue>#include <stack>#include <map>using namespace std;const int N = 122;int coe[N], tmp[N];int n;void Init();int main(){    Init();    while (~scanf("%d", &n))    {        if (n == 0) break;        printf("%d\n", coe[n]);    }    return 0;}void Init(){    memset(coe, 0, sizeof(coe));    memset(tmp, 0, sizeof(tmp));    coe[0] = 1;    for (int i=1; i<N; ++i)    {        for (int j=0; j<=120; ++j)        {            for (int k=0; k<N; ++k)            {                if (k * i + j > 120) break;                tmp[k * i + j] += coe[j];            }        }        memcpy(coe, tmp, sizeof(coe));        memset(tmp, 0, sizeof(tmp));    }    return;}


0 0
原创粉丝点击