解决一类整数拆分问题

void mu()
{
    memset(c1,0,sizeof(c1)) ;
    memset(c2,0,sizeof(c2)) ;
    for(int i=0 ;i<=a[0]*b[0] ;i+=a[0])//a[i]第i项单价 b[i]第i项数量 
        c1[i]=1 ;
    for(int i=1 ;i<n ;i++)//n代表总共的单价数量
    {
        for(int j=0 ;j<=sum ;j++)//sum代表幂次上限 
        {
            for(int k=0 ;k+j<=sum && k<=a[i]*b[i] ;k+=a[i])
                c2[j+k]+=c1[j] ; 
        }
        for(int j=0 ;j<=sum ;j++)
        {
            c1[j]=c2[j] ;
            c2[j]=0 ;
        }
    } 
}
View Code

最后c1[i]表示i次幂的系数