题目来源:http://poj.org/problem?id=1664
解题思路:利用指数母函数,进行整数拆分。
设苹果数为M,果盘数为N;
将数字M拆成N个数字相加的结果。
#include <iostream>
using namespace std;
const int _max = 10001;
// c1是保存各项质量砝码可以组合的数目
// c2是中间量,保存每一次的情况
int c1[_max], c2[_max];
int main()
{
int nNum;
int i, j, k;
int t,m,n;
cin>>t;
while(t--)
{
cin>>m>>n;
for(i=0; i<=m; ++i)
{
c1[i] = 1;
c2[i] = 0;
}
for(i=2; i<=n; ++i)
{
for(j=0; j<=m; ++j)
for(k=0; k+j<=m; k+=i)
{
c2[j+k] += c1[j];
}
for(j=0; j<=m; ++j)
{
c1[j] = c2[j];
c2[j] = 0;
}
}
cout << c1[m] << endl;
}
return 0;
}