根据整数划分的规律,可以得出下面公式
递归公式:
q(n, m) 表示对整数n进行划分,最大数不超过m的划分个数。
同时,本人在做算法题时,遇到一个类似整数划分的问题,及:对整数n进行划分,其划分的数的个数不超过m个,求其划分个数。设解决这个问题的方法为p(n, m)。在求解过程中,我发现:对整数n进行划分,最大数不超过m的划分个数=:对整数n进行划分,其划分的数的个数不超过m个,求其划分个数。即:q(n, m) = p(n, m),所以求解这个问题的时候,可以通过求解q(n, m)来实现。
代码:
#include <stdio.h>
int q(int n, int m) {
if((n<1)||(m<1)) return 0;
if((n==1)||(m==1)) return 1;
if(n < m) return q(n,n);
if(n==m) return 1 + q(n,n-1);
return q(n,m-1) + q(n-m,m);
}
int main()
{
int n,result;
scanf("%d",&n);
result = q(n,n);
printf("Result:%d",result);
return 0;
}