1 #include <iostream>
2  using namespace std;
3  // Author: Tanky Woo
4  // www.wutianqi.com
5 const int _max = 10001;
6 // c1是保存各项质量砝码可以组合的数目
7 // c2是中间量,保存没一次的情况
8 int c1[_max], c2[_max];
9 int main()
10 { //int n,i,j,k;
11 int nNum; //
12 int i, j, k;
13
14 while(cin >> nNum)
15 {
16 for(i=0; i<=nNum; ++i) // ---- ①
17 {
18 c1[i] = 1;
19 c2[i] = 0;
20 }
21 for(i=2; i<=nNum; ++i) // ----- ②
22 {
23
24 for(j=0; j<=nNum; ++j) // ----- ③
25 for(k=0; k+j<=nNum; k+=i) // ---- ④
26 {
27 c2[j+k] += c1[j];
28 }
29 for(j=0; j<=nNum; ++j) // ---- ⑤
30 {
31 c1[j] = c2[j];
32 c2[j] = 0;
33 }
34 }
35 cout << c1[n] << endl;
36 }
37 return 0;
38 }

 

 

母函数模板