hdu 1028

整数拆分问题:n可以由多少种组合的数之和构成;
组合问题即n个相同小球放进n个相同的盒子里,盒子里球个数可以为0,问有多少种放置的方法。简单母函数。

#include<stdio.h>
#include<string.h>
#define N 130
int main ()
{
    int n,c1[N],c2[N];
    int i,j,k;
    while (scanf("%d",&n)!=EOF)
    {
        memset(c2,0,sizeof(c2));
        for (i=0;i<=n;++i) c1[i]=1;//初始化系数
        for (i=2;i<=n;++i)
        {
            for (j=0;j<=n;++j)
            for (k=0;k+j<=n;k+=i)//系数叠加,如果个数限制,k<=i*num[i];
                c2[j+k]+=c1[j];
            for (j=0;j<=n;++j)
            {
                c1[j]=c2[j];
                c2[j]=0;
            }
        }
        printf("%d\n",c1[n]);
    }
    return 0;
}

 

posted @ 2012-11-27 17:17  _hikaru__  阅读(125)  评论(0编辑  收藏  举报