People
in Silverland use square coins. Not only they have square shapes but
also their values are square numbers. Coins with values of all square
numbers up to 289 (=17^2), i.e., 1-credit coins, 4-credit coins,
9-credit coins, ..., and 289-credit coins, are available in Silverland.
There are four combinations of coins to pay ten credits:
ten 1-credit coins,
one 4-credit coin and six 1-credit coins,
two 4-credit coins and two 1-credit coins, and
one 9-credit coin and one 1-credit coin.
Your mission is to count the number of ways to pay a given amount using coins of Silverland.
The
input consists of lines each containing an integer meaning an amount to
be paid, followed by a line containing a zero. You may assume that all
the amounts are positive and less than 300.
For
each of the given amount, one line containing a single integer
representing the number of combinations of coins should be output. No
other characters should appear in the output.
Ignatius.L | We have carefully selected several similar problems for you:
2152 2082 2079 2069 2110
1 //0MS 200K 615 B G++
2 #include<stdio.h>
3 #define N 305
4 int c1[N],c2[N];
5 int _n[18]={1,4,9,16,25,36,49,64,81,100,121,144,169,196,225,256,289};
6 int fun(int n)
7 {
8 int i,j,k;
9 for(i=0;i<=n;i++){
10 c1[i]=1;
11 c2[i]=0;
12 }
13 for(i=1;i<17;i++){
14 for(j=0;j<=n;j++)
15 for(k=0;k+j<=n;k+=_n[i])
16 c2[j+k]+=c1[j];
17 for(j=0;j<=n;j++){
18 c1[j]=c2[j];
19 c2[j]=0;
20 }
21 }
22 return c1[n];
23 }
24 int main(void)
25 {
26 int n;
27 while(scanf("%d",&n)!=EOF)
28 {
29 if(n==0) break;
30 printf("%d\n",fun(n));
31 }
32 return 0;
33 }