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;
}