hdu 1028 母函数

题意:给定整数N,将其分成若干正数的和(正数可以相同),问有多少种方案?

例如N=4,有:

   4 = 4;
   4 = 3 + 1;
   4 = 2 + 2;
   4 = 2 + 1 + 1;
   4 = 1 + 1 + 1 + 1;  共5种方案。

分析:(1+x+x2+x3...)*(1+x2+x4+x6...)*(1+x3+x6+x9...)....

 

 

const int N = 120;
int a[2][N+1], p, q;
int n;

void init(){
    a[0][0] = 1;
    FOE(i, 1, N){
        p = 1-q;
        FOE(j, 0, N) if(a[q][j]) {
            for(int k=0; j+k*i<=N; k++){
                a[p][j+k*i] += a[q][j];
            }
        }
        memset(a[q], 0, sizeof a[q]);
        q = p;
    }
}

int main(){
    #ifndef ONLINE_JUDGE
    freopen("in.txt","r",stdin);
    //freopen("out.txt","w",stdout);
    #endif

    init();

    while(~scanf("%d", &n)) printf("%d\n", a[q][n]);

    return 0;
}

 

posted @ 2013-05-22 21:57  心向往之  阅读(123)  评论(0编辑  收藏  举报