hdu 1028 Ignatius and the Princess III(母函数 or dp)

#include <stdio.h>

 

#define MAXN 122

int y1[MAXN], y2[MAXN];

void init(const int n)
{
    int i, j, k;
    for(i = 0; i <= n; i++)
    {
        y1[i] = 1;
        y2[i] = 0;
    }
    for(i = 2; i <= n; i++)
    {
        for(j = 0; j <= n; j++)
        {
            for(k = 0; k + j <= n; k += i)
            {
                y2[k + j] += 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(121);

    int n;
    while(scanf("%d", &n) != EOF) printf("%d\n", y1[n]);


    return 0;
}

 

dp:

#include <stdio.h>

 

#define MAXN 121

int f[MAXN][MAXN];

void dp(int n)
{
    int i, j;
    for(i = 0; i <= n; i++)
    {
        f[i][1] = 1;
        f[1][i] = 1;
    }
    for(i = 2; i <= n; i++)
    {
        for(j = 2; j <= n; j++)
        {
            if(i < j) f[i][j] = f[i][i];
            else if(i == j) f[i][j] = 1 + f[i][i - 1];
            else f[i][j] = f[i - j][j] + f[i][j - 1];
        }
    }
}

int main()
{
    #ifndef ONLINE_JUDGE
    freopen("indata.txt", "r", stdin);
    #endif
    dp(120);
    int n;
    while(scanf("%d", &n) != EOF)
    {
        printf("%d\n", f[n][n]);
    }
    return 0;
}

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