游客 Signup | Login
中文 | En

1904 - 拆分数

整数n(n<=120)拆分成1,2,3…n的和,且允许重复,求总共的拆分数。
以4为例:
4=4;
4=3+1;
4=2+2;
4=2+1+1;
4=1+1+1+1;
其中3+1与1+3属于同一种,因此整数4的拆分数有5种。

Input

输入包含多个测试用例。每个测试用例包含一个正整数N(1 < = N < = 120),EOF表示输入终止。

Output

对于每个测试用例,你必须输出一行包含一个整数P,表明拆分数个数。

Examples

Input

4
10
20

Output

5
42
627

Solution C++

#include <iostream>
using namespace std;  
int c1[121],c2[121];
int main()
{    
    int n,i,j,k;
    while (cin>>n)
    {
        for(i=0;i<=n;i++)
            c2[i]=0;
        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)
                    c2[j+k]+=c1[j];
            for(j=0;j<=n;j++)
            {
                c1[j]=c2[j];
                c2[j]=0;
            }
        }
        cout<<c1[n]<<endl;
    }
    return 0;
}
Time Limit 1 second
Memory Limit 32 MB
Discuss Stats
上一题 下一题