题目:
将正整数n 表示成一系列正整数之和,n=n1+n2+…+nk, 其中n1>=n2>=…>=nk>=1 ,k>=1 。正整数n 的这种表示称为正整数n 的划分。正整数n 的不同的划分个数称为正整数n 的划分数。
Input
标准的输入包含若干组测试数据。每组测试数据是一个整数N(0 < N <= 50)。
Output
对于每组测试数据,输出N的划分数。
Sample Input
5
Sample Output
7
Hint
5, 4+1, 3+2, 3+1+1, 2+2+1, 2+1+1+1, 1+1+1+1+1
题解:
这道题仔细一想,类似于分苹果,即,n个整数放到n个盘子里,允许有的盘子空着不放。
AC代码:
#include<stdio.h>
#include<string.h>
#include<math.h>
#include<algorithm>
using namespace std;
int dfs(int a,int b)
{
if(a==0||b==1)//当
return 1;
else if(a<b)
return dfs(a,a);
else
return dfs(a,b-1)+dfs(a-b,b);
}
int main()
{
int n,s;
while(~scanf("%d",&n))
{
s=dfs(n,n);
printf("%d\n",s);
}
return 0;
}