这道题和hdu1086一样都用的是母函数
题意是对于无数个各种面值(1,4,9.......17^17)的硬币
给出一个数字问这些硬币组成这个数字有多少种组成方式
实际上对于v1[n]
n就是指硬币们组成的数字,v1[n]就是组成这个数字的方法数
//
// main.cpp
// 1398
//
// Created by Mr.Xue on 17/7/17.
// Copyright © 2017年 Mr.Xue. All rights reserved.
//
#include <iostream>
using namespace std;
int val[20];
int v1[1000],v2[1000];
int main()
{
int t;
for(int i=1;i<=17;i++)
val[i-1]=i*i;
memset(v1,0,sizeof(v1));
for(int i=0;i<=300;i++)
v1[i]=1;
for(int i=1;i<17;i++)
{
for(int j=0;j<=300;j++)
{
if(v1[j]!=0)
{
for(int k=0;k<=300;k=k+val[i])
{
if(j+k<=300)
v2[k+j]+=v1[j];
}
}
}
memcpy(v1,v2,sizeof(v2));
memset(v2,0,sizeof(v2));
}
while(scanf("%d",&t)&&t!=0)
{
printf("%d\n",v1[t]);
}
return 0;
}