递归算法-->整数划分
来源:互联网 发布:淘宝联盟提现钱没到账 编辑:程序博客网 时间:2024/04/28 02:38
何为整数划分:
例如:6的划分:
6;
5+1;
4+2;4+1+1;
3+3;3+2+1;3+1+1+1;
2+2+2;2+2+1+1;2+1+1+1+1
1+1+1+1+1+1;
根据n和m的关系,考虑以下几种情况:
(1)当n=1时,不论m的值为多少(m>0),只有一种划分即{1};
(2)当m=1时,不论n的值为多少,只有一种划分即n个1,{1,1,1,...,1};
(3)当n=m时,根据划分中是否包含n,可以分为两种情况:
(a)划分中包含n的情况,只有一个即{n};
(b)划分中不包含n的情况,这时划分中最大的数字也一定比n小,即n的所有(n-1)划分。 因此 q(n,n) =1 + q(n,n-1);
(4)当n<m时,由于划分中不可能出现负数,因此就相当于q(n,n);
(5)但n>m时,根据划分中是否包含最大值m,可以分为两种情况:
(a)划分中包含m的情况,即{m, {x1,x2,...xi}}, 其中{x1,x2,... xi} 的和为n-m,因此这情况下为q(n-m,m)
(b)划分中不包含m的情况,则划分中所有值都比m小,即n的(m-1)划分,个数为q(n,m-1);
因此 q(n, m) = q(n-m, m)+q(n,m-1);
综上所述:
q(n, m) = 1; (n=1 or m=1)
q(n,m) = q(n, n); (n<m)
1+ q(n, m-1); (n=m)
q(n-m,m)+q(n,m-1); (n>m)
代码如下:
#include<iostream>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;}
- 递归算法---整数划分
- 递归算法-->整数划分
- 递归算法---整数划分
- 整数划分问题(递归算法)
- 【算法】 递归求解整数划分
- 整数划分问题 ----- 递归算法
- 整数划分问题递归算法
- 整数划分的递归算法
- 算法04:整数划分递归算法
- 经典算法2:递归求解整数划分
- c++: 递归算法整数划分问题
- 整数划分的递归实现算法
- 整数划分的递归实现算法
- 整数划分的递归实现算法
- 算法设计与分析 整数划分的递归实现算法
- 整数划分(递归)
- 整数划分《递归法》
- 递归实现整数划分
- <机器学习>(周志华)读书笔记 -- 第一章 绪论
- windows下安装python的numpy模块
- 性能测试知多少---了解前端性能
- C/C++信息隐写术(四)之大程序藏入BMP文件
- U-Boot 中 PING 命令处理流程
- 递归算法-->整数划分
- 【POJ1159】【DP】17.2.6 T1 强迫症 题解
- 树莓派串口 C 语言:http://www.cnblogs.com/einstein-2014731/p/5551846.html
- codeves天梯 花生采摘
- (八)对话框
- file, inode与cdev的总结
- 如何理解开放封闭原则?
- python和C的互相调用
- C#开源音频处理类库 NAudio