整数划分问题
2016-05-30 21:52
204 查看
递归经典问题
将正整数表示成一系列整数之和
n = n1 + n2 + n3 +++ nk n1>=n2>=n3 >=nk >= 1;
正整数n的这种表示称为正整数n的划分。求正整数n的不同划分个数
例如 5 可以划分为(5), (4,1),(3,2),(3,1,1),(2,2,1)(2,1,1,1)(1,1,1,1,1)。总共7种可能。
建立q(n,m)n为正整数的划分, m为其中最大的加数。
接下来就是分类讨论的时光了
1: n = 1 m无论为何值 只有一种分法 (1)
2: m = 1 n无论为何值 只有一种分法 (1+1+1 ++ ) 总共有n个1在加。
3:n < m 最大的加数比n还大 则变为q(n,m)。
4:n == m 时
子讨论时光又到了
4:1 当分法中包含m时 只有一种分法(m)
4:2 当分法不包含m时 我们刚开始说m是加数 现在分法中不包含m 所以最大的加数现在是m-1
则 q(n,n) = 1 + q(n,n-1)。
5:n > m 时
子讨论时光
5:1当分法中包含m时 (m,n1 + n2 + + nk) n1加到nk的值就是n-m 递归就是子问题与原问题一样只是范围一样 则 q(n-m,m)划分的数变成n-m 最大加数还是m
5:2当分法中不包含m时最大加数变为m-1
综合5 q(n,m) = q(n-m,m) + q(n,m-1)
大综合
q(n,m) n = 1或者m=1 1
n < m q(n, n)
n = m q(n,n-1) + 1
n > m q(n-m,m) + q(n,m-1)。
将正整数表示成一系列整数之和
n = n1 + n2 + n3 +++ nk n1>=n2>=n3 >=nk >= 1;
正整数n的这种表示称为正整数n的划分。求正整数n的不同划分个数
例如 5 可以划分为(5), (4,1),(3,2),(3,1,1),(2,2,1)(2,1,1,1)(1,1,1,1,1)。总共7种可能。
建立q(n,m)n为正整数的划分, m为其中最大的加数。
接下来就是分类讨论的时光了
1: n = 1 m无论为何值 只有一种分法 (1)
2: m = 1 n无论为何值 只有一种分法 (1+1+1 ++ ) 总共有n个1在加。
3:n < m 最大的加数比n还大 则变为q(n,m)。
4:n == m 时
子讨论时光又到了
4:1 当分法中包含m时 只有一种分法(m)
4:2 当分法不包含m时 我们刚开始说m是加数 现在分法中不包含m 所以最大的加数现在是m-1
则 q(n,n) = 1 + q(n,n-1)。
5:n > m 时
子讨论时光
5:1当分法中包含m时 (m,n1 + n2 + + nk) n1加到nk的值就是n-m 递归就是子问题与原问题一样只是范围一样 则 q(n-m,m)划分的数变成n-m 最大加数还是m
5:2当分法中不包含m时最大加数变为m-1
综合5 q(n,m) = q(n-m,m) + q(n,m-1)
大综合
q(n,m) n = 1或者m=1 1
n < m q(n, n)
n = m q(n,n-1) + 1
n > m q(n-m,m) + q(n,m-1)。
int q(int n, 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,n-1) + 1; return q(n-m,m) + q(n, m-1);//最后一种情况 }
相关文章推荐
- 计算机科学中32个常用的基础算法
- hrbeu Kth Largest (二重二分)
- poj 3264 Balanced Lineup【ST算法(解区间最值)】
- 2013年黑龙江省赛C题.Compilation【字符串匹配】
- 猴子分桃问题
- 常见算法之希尔排序java实践
- 基础算法
- 维特比算法C++实现
- 【基础练习】【模拟】codevs1704 卡片游戏题解
- 【基础练习】【二分】codevs3955 最长严格上升子序列(加强版)题解
- 【基础练习】【二分】codevs2188 最长上升子序列(限定元素)题解
- 【基础练习】【二分】codevs1766 装果子题解
- 【基础练习】【二分】洛谷1281 书的复制题解
- 【基础练习】【二分】codevs2072 分配房间题解
- 【map练习】【map+模拟】codevs1164 统计数字题解
- 【基础练习】【搜索/枚举】codevs1168 火柴棒等式题解
- 【日常学习】【搜索递推和其他】10.21.2015校内测试总结
- 【基础练习】【Floyd+枚举】codevs1167 树网的核题解
- 【基础练习】【归并逆序对】codevs3324 新斯诺克题解
- 基础算法题解(hrbeu OJ)