2011-12-16 07:23:13
地址:http://acm.hdu.edu.cn/showproblem.php?pid=1398
题意:有1、4、9、16.。。289种面额的硬币无数枚(平方数),组成面值为n的方法有多少种。
mark:典型母函数题,不过dp,直接YY出了递推公式,也不难。
代码:
# include <stdio.h>
int dp[20][350] ;
int tab[20] = {0, 1} ;
int init()
{
int i, j ;
for (i = 2 ; i <= 17 ; i++)
tab[i] = i*i ;
for (i = 0 ; i <= 300 ; i++)
dp[1][i] = 1 ;
for (i = 2 ; i<= 17 ; i++)
{
for (j = 0 ;j <= 300 ;j ++)
dp[i][j] = dp[i-1][j] ;
for (j = i*i ; j <= 300 ; j++)
dp[i][j] += dp[i][j-i*i] ;
}
}
int main ()
{
int n ;
init() ;
while (~scanf ("%d", &n) && n)
{
printf ("%d\n", dp[17][n]) ;
}
}