这一题,简单的母函数的应用,好久没有写过母函数了,有点生疏了。
题目的硬币有17种,分别是1到17的平方的硬币。
下面的是AC的代码:
#include <iostream>
#include <cstring>
#include <cmath>
using namespace std;
int dp[305], temp[305];
int main()
{
int i, j, k, l;
for(i = 0; i < 305; i++) //初始化
{
dp[i] = 1;
temp[i] = 0;
}
for(j = 2; j <= 17; j++) //硬币的种类
{
for(k = 0; k < 301; k++)
{
for(l = 0; l + k < 301; l += j * j)
temp[l + k] += dp[k];
}
for(k = 0; k < 301; k++)
{
dp[k] = temp[k];
temp[k] = 0;
}
}
int m;
while(cin >> m && m)
cout << dp[m] << endl;
return 0;
}