此题因为有coins 总数的限制所以不是常规的母函数。
此处将原有的储存系数的一位数组变成二维第一位表示系数第二维表示当前硬币数。
void gf(void)
{
int i,j,k,t;
c1[0][0] = 1;
for(i = 0 ; i < 5; i++)
{
for(j = 0; j < MAXN; j++)
for(k = 0; k+j < MAXN; k += a[i])
{
for(t = 0; t + k / a[i] <= 100; t++)
{
c2[j+k][t+k/a[i]] += c1[j][t];
}
}
for(j = 0 ; j < MAXN; j++)
{
for(t = 0; t <= 100; t++)
{
c1[j][t] = c2[j][t];
c2[j][t] = 0;
}
}
}
}