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;
}

posted @ 2010-10-14 00:31  菜到不得鸟  阅读(91)  评论(0)    收藏  举报