# Description
将数字N分成2份以上.使用的数字不可重复.例如5=1+4=2+3,就只有两种拆分的方式.
# Format
## Input
每一行给出一个数字N
3<=N<=500
整个测试以0代表结束.
## Output
输出有多行,每行一个数字,代表拆分的种数
# Samples
```input1
3
5
0
```
```output1
1
2
```
#include <bits/stdc++.h>
using namespace std;
long long f[555][555];
int num;
long long dfs(int n,int m)
{
// cout<<n<<" "<<m<<endl;
if (m==0&&n==0)
return 1;
if (m==0)
return 0;
// if (n==1&&m==1)
// return 1;
if (f[n][m])
return f[n][m];
if (m*(m+1)/2<n)
//必须加上这个剪枝才能过
return 0;
long long a=dfs(n,m-1);
long long b=0;
if (n>=m)
b=dfs(n-m,m-1);
f[n][m]=a+b;
return f[n][m];
}
int main()
{
while(true)
{
cin>>num;
if (num==0)
break;
cout<<dfs(num,num-1)<<endl;
}
}