整数划分
来源:互联网 发布:剑三脸型数据怎么导入 编辑:程序博客网 时间:2024/05/17 03:14
将正整数n表示成一系列正整数之和:n=n1+n2+...+nk, 其中n1>=n2>=....>=nk>=1, k >=1
求正整数n的不同划分个数。
例如正整数6有如下11中不同的划分:
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
如果设P(n)为正整数n的划分数,则对于找到递归关系是很困难,我们不妨引入这样一个变量:将n最大加数不大于m的划分个数记做q(n,m)
那么,我们就可以建立如下的递归关系
1. q(n, 1) = 1, n > 1
当最大加数ni不大于1的时候,任何正整数n只有一种划分形式,即n = 1+1+1+....+1
2. q(n, m) = q(n, n), 当m >= n
最大加数ni实际上是不能大于n的。如q(1, m) = 1
3. q(n, n) = q(n, n-1) + 1
正整数n的划分可以有ni = n的划分和ni <= n-1的划分组成
4. q(n, m) = q(n, m-1) + q(n-m, m), n > m > 1
正整数n的最大加数ni不大于m的划分由:
ni <= m-1的划分(全部划分< m)和ni = m的划分组成。
q(n-m, m):即去掉一个m后n-m的可能划分数
#include<iostream>using namespace std;int fun(int n, int m){if(n == 1 || m == 1)return 1;else if(n < m)return fun(n, n);else if(n == m)return fun(n, m-1) + 1;elsereturn fun(n, m-1) + fun(n-m, m);}int main(){int n;cin>>n;cout<<fun(n, n)<<endl;return 0;}
0 0
- 整数划分
- 整数划分
- 整数划分
- 整数划分
- 整数划分
- 整数划分
- 整数划分
- 整数划分
- 整数划分
- 整数划分
- 整数划分
- 整数划分
- 整数划分
- 整数划分
- 整数划分:
- 整数划分
- 整数划分
- 整数划分
- android学习笔记(2)—view的事件体系
- 案例分析:基于消息的分布式架构
- C++新增数据类型long long ,unsigned long long
- 使用VAssistX的好处
- 《算法竞赛入门经典2ndEdition 》例题5-4 反片语(Ananagrams, Uva156)
- 整数划分
- jQuery使用$.ajaxFileUpload上传
- hdu 1671 Phone List 字典树
- 非递归DFS
- Android广播的静态与动态注册
- oracle11g dataguard failover重建后归档日志没有被应用被NO的问题
- 20151229 053 30-60
- tinyos学习笔记9--TestRPL(UDP)例程分析
- IOS开发系列----Objective-c的内存管理