一、实验目的与要求
1、掌握整数划分问题的算法;
2、初步掌握分治算法
二、实验题目
设n为正整数,将n表示为一系列正整数之和,即n = n1+n2+n3+….+nk (n1 >= n2 >= …. >= nk >= 1) ,正整数n的这种表示称为n的整数划分。给定整数n,求正整数n的所有的整数划分数。
输入:输入第一行包括一个整数n。
输出:输出一个整数代表结果。
Simple input:
6
Simple output:
11
三、实现思想
1、q(n,1)=1,n>=1
2、q(n,m)=q(n,n),m>=n
3、q(n,n)=1+q(n,n-1)
4、q(n,m-1)+q(n-m,m),n>m>1
四、实现代码
#include<bits/stdc++.h>
using namespace std;
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 q(n,m-1)+1;
return q(n,m-1)+q(n-m,m);
}
int main()
{
cout<<q(6,6)<<endl;
return 0;
}
五、实验结果
11