这题我是不懂的,看完牛人的做法之后才会做,所以这是转载;
下面是该大牛的思路:
整数划分问题是将一个正整数n拆成一组数连加并等于n的形式,且这组数中的最大加数不大于n。
如6的整数划分为
由此可以看出,这是一种递归的思路,把问题不断的缩小直到满足最初条件为止,这也是一种易懂的思路。
#include<stdio.h>
int s[130][130]={0};
int split (int n,int m)
{
if(s[n][m])
return s[n][m];
if(n<1||m<1)
return s[n][m]=0;
if(n==1||m==0)
return 1;
if(n<m)
return s[n][m]=split(n,n);
if(n==m)
return s[n][m]=(split(n,m-1)+1);
else
return s[n][m]=(split(n,m-1)+split(n-m,m));
}
int main ()
{
int n;
split(120,120);
while(scanf("%d",&n)!=EOF)
printf("%d\n",split(n,n));
return 0;
}