有1克、2克、3克、4克的砝码各一枚,能称出哪几种重量?各种重量各有几种可能方案?
考虑用母函数来求解:
G(x)=(1+x+x^2+x^3…)*(1+x^2+x^4+…)*(1+x^3+x^6+…)
#include"iostream"
using namespace std;
const int _max=10001;
int c1[_max],c2[_max];//c1是保存各项质量砝码可以组合的数目;c2是中间量,保存每一次的情况;
int main()
{
int nNum;
int i,j,k;
while(cin>>nNum)
{
for(i=0;i<=nNum;++i)
{
c1[i]=1;
c2[i]=0;
}
for(i=2;i<=nNum;++i)
{
for(j=0;j<=nNum;++j)
for(k=0;k+j<=nNum;k+=i)
{
c2[j+k]+=c1[j];
}
for(j=0;j<=nNum;++j)
{
c1[j]=c2[j];
c2[j]=0;
}
}
cout<<c1[nNum]<<endl;
}
return 0;
}