将正整数n 表示成一系列正整数之和,n=n1+n2+…+nk, 其中n1>=n2>=…>=nk>=1 ,k>=1 。
正整数n 的这种表示称为正整数n 的划分。正整数n 的不同的划分个数称为正整数n 的划分数。
5
7
#include<bits/stdc++.h>
using namespace std;
int dp[55][55];
int main()
{
int n;
while(cin>>n)
{
memset(dp,0,sizeof(dp));
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
{
if(i==1||j==1) dp[i][j]=1;
else
{
if(i<j) dp[i][j]=dp[i][i];
else if(i==j) dp[i][j]=dp[i][j-1]+1;
else dp[i][j]=dp[i-j][j]+dp[i][j-1];
}
}
printf("%d\n",dp[n][n]);
}
return 0;
}