hdu1398 Square Coins(母函数)
#include <stdio.h>
#define MAXN 301
int pow2[18], y1[MAXN], y2[MAXN];
void init(const int n)
{
int i, j, k;
for(i = 0; i <18; i++) pow2[i] = i * i;
for(i = 0; i <= n; i++)
{
y1[i] = 1;
y2[i] = 0;
}
int idx = 2;
for(i = pow2[idx]; idx <= 17; i = pow2[++idx])
// for(i = 2; i*i <= n; i++)
{
for(j = 0; j <= n; j++)
{
for(k = 0; j + k <= n; k += i)
// for(k = 0; j + k <= n; k += i * i)
{
y2[j + k] += y1[j];
}
}
for(j = 0; j <= n; j++)
{
y1[j] = y2[j];
y2[j] = 0;
}
}
}
int main()
{
#ifndef ONLINE_JUDGE
freopen("indata.txt", "r", stdin);
#endif
init(300);
int n;
while(scanf("%d", &n), n)
{
printf("%d\n", y1[n]);
}
return 0;
}
浙公网安备 33010602011771号