整数划分问题递归算法

原创 2016年05月30日 10:52:29

将整数n表示成一系列正整数之和

n=n1+n2+......+nk  (其中,n1≥n2≥......≥nk≥1,k≥1)

正整数n的这种表示称为正整数n的划分。正整数n的不同的划分个数称为正整数n的划分,记作p(n)。例如p(6)=11。

在正整数n的所有的不同的划分中,将最大加数n1不大于m的划分个数记作q(n,m)。可以建立q(n,m)的如下递归关系。

(1)q(n,1)=1,n≥1

当最大加数n1不大于1时,任何正整数n只有一种划分形式,即n=1+1+...1(n个1相加)。

(2)q(n,m)=q(n,n),m≥n

最大加数n1实际上不能大于n。因此q(1,m)=1。

(3)q(n,n)=q(n,n-1)+1,

正整数n的划分由n1=n的划分和n1≤n-1的划分组成。

(4)q(n,m)=q(n,m-1)+q(n-m,m),n>m>1

正整数n的最大加数n1不大于m的划分由n1=m的划分和n1≤m-1的划分组成。

以上关系实际上给出了计算q(n,m)的递归试如下:

  

据此,可设计计算q(n,m)的递归函数如下。整数n的划分数p(n)=q(n,n)。

#include<stdio.h>
#include<iostream.h>
//using namespace std;
int q(int n,int m)
{
	if((n==1)||(m==1)) 
			return 1;
	else if(n<m) 
			return q(n,n);
	else if(n==m) 
			return q(n,m-1)+1;
	else 
		return q(n,m-1)+q(n-m,m);
}
int main()
{
	int x;
	cin>>x;
	printf("%d\n",q(x,x));
	return 0;
}




版权声明:本文为博主原创文章,未经博主允许不得转载。

整数划分问题(递归法)

文章来源:http://www.cnblogs.com/dolphin0520/archive/2011/04/04/2005098.html   整数划分问题是算法中的一个经典命题之一,有关这...
  • u012442207
  • u012442207
  • 2015年06月17日 19:02
  • 1013

算法(1)整数划分问题之递归解决

今日,阅读《ACM/ICPC 算法训练》时,发现一道名为“整数划分”的题,书上解释极为模糊,自己研究了一下此题,将其解决,记录下解题思路,以备以后有用时快速理解;   一,题意简述   将整数表示...
  • garypotter
  • garypotter
  • 2016年03月31日 18:00
  • 1662

整数划分问题(递归法)

文章来源:http://www.cnblogs.com/dolphin0520/archive/2011/04/04/2005098.html   整数划分问题是算法中的一个经典命题之一,有关这...
  • u012442207
  • u012442207
  • 2015年06月17日 19:02
  • 1013

算法(1)整数划分问题之递归解决

今日,阅读《ACM/ICPC 算法训练》时,发现一道名为“整数划分”的题,书上解释极为模糊,自己研究了一下此题,将其解决,记录下解题思路,以备以后有用时快速理解;   一,题意简述   将整数表示...
  • garypotter
  • garypotter
  • 2016年03月31日 18:00
  • 1662

递归算法-->整数划分

何为整数划分: 所谓整数划分,是指把一个正整数n写成为 其中,    为正整数,并且    ;    为n的一个划分。 如果    中的最大值不超...
  • weixin_35909255
  • weixin_35909255
  • 2017年02月06日 21:08
  • 1682

整数划分(递归方法)

经典整数划分问题递归图解
  • qq_37521235
  • qq_37521235
  • 2017年03月17日 14:00
  • 771

整数划分问题的递归算法-c语言

整数划分问题是算法中的一个经典命题之一,有关这个问题的讲述在讲解到递归时基本都将涉及。所谓整数划分,是指把一个正整数n写成如下形式:        n=m1+m2+...+mi; (其中mi为正...
  • xiezhongtian
  • xiezhongtian
  • 2014年01月03日 18:46
  • 1993

openjudge 简单的整数划分问题

T2:简单的整数划分问题 查看提交统计提问 总时间限制: 100ms 内存限制: 65536kB 描述 将正整数n 表示成一系列正整数之和,n=n1+n2+…+nk, 其中n1>=n2>=...
  • kucece
  • kucece
  • 2015年07月04日 23:27
  • 1852

整数划分问题的动态规划算法

因为整数划分问题满足最优子结构和子问题重叠特征,故可以用动态规划算法来解。 分别使用了自顶向下的备忘录算法和自底向上动态规划算法,并且给出了一个优化算法。...
  • QiaoRuoZhuo
  • QiaoRuoZhuo
  • 2017年04月06日 10:02
  • 658

dp整数划分问题——03:复杂的整数划分问题

整数划分 :   这道好题求:   1. 将n划分成若干正整数之和的划分数。   2. 将n划分成k个正整数之和的划分数。   3. 将n划分成最大数不超过k的划分数。   4. 将n划分成若干奇正整...
  • curson_
  • curson_
  • 2016年07月22日 20:26
  • 554
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:整数划分问题递归算法
举报原因:
原因补充:

(最多只允许输入30个字)