HDU—— 1028

来源:互联网 发布:606写卡器安装软件 编辑:程序博客网 时间:2024/06/13 03:50

1028  Ignatius and the Princess III

题意:将一个整数分解成几个整数相加的形式,有多少种分解方法。

解题思路:母函数(模板直接套用)。不理解母函数的请查阅相关资料。

Code:

#include <iostream>using namespace std;const int len = 1e4+5;int C1[len],C2[len];int main(){    int N;    while(cin>>N)    {        for(int i = 0; i<=N; i++)        {            C1[i] = 1,C2[i] = 0;        }        for(int i = 2; i<=N; ++i)        {            for(int j = 0; j<=N; ++j)            {                for(int k = 0; k+j<=N; k += i)                {                    C2[j+k] += C1[j];                }            }            for(int j = 0; j<=N; j++)            C1[j] = C2[j], C2[j] = 0;        }        cout<<C1[N]<<endl;    }    return 0;}

1398 Square Coins

题意:有1^2,2^2,3^2.......17^2等17中硬币,先给出一个数字用这些硬币去组合,共有多少种组合方式。

解题思路:母函数模板k+=i变成了k+=i*i,详见代码。

Code:

#include <iostream>using namespace std;const int len = 1e4+5;int C1[len],C2[len];int main(){    int N;    while(cin>>N && N)    {        for(int i = 0; i<=N; i++)            C1[i] = 1,C2[i] = 0;        for(int i = 2; i<=17; i++)        {            for(int j = 0; j<=N; j++)            for(int k = 0; k+j<=N; k += i*i)            {                C2[j+k] += C1[j];            }            for(int j = 0; j<=N; j++)            C1[j] = C2[j], C2[j] = 0;        }        cout<<C1[N]<<endl;    }    return 0;}

0 0
原创粉丝点击