include
include
using namespace std;
int main()
{
int ans[105][105];//以表格记录答案
for(int n=1;n<105;n++)
ans[n][1]=1;//n表示被拆分的正整数
for(int m=1;m<105;m++)
ans[1][m]=1;//m表示拆分结果可取的最大数
for(int n=2;n<105;n++)
for(int m=2;m<105;m++)
{
if(m>n) ans[n][m]=ans[n][n];//m过大时与m=n无异
else if(n==m) ans[n][m]=ans[n][m-1]+1;//n=m时,分最大值是否为m两种
else ans[n][m]=ans[n][m-1]+ans[n-m][m];//n>m时,分最大值是否为m两种
}
int n;
while(cin>>n) cout<<ans[n][n]<<endl;
}
具体分析方法见百度百科