C-整数划分
将正整数 n 表示成一系列正整数之和, n=n1+n2+…+nk, 其中 n1>=n2>=…>=nk>=1 , k>=1 。
正整数 n 的这种表示称为正整数 n 的划分。正整数 n 的不同的划分个数称为正整数 n 的划分数,记作 p(n) 。
例如正整数 6 有如下 11 种不同的划分,所以 p(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.
在正整数 n 所有不同的划分中,将最大加数 n1 不大于 m 的划分个数记作 q(n,m) ,称它为属于 n 的一个 m 划分。根据 n 和 m 的关系,考虑以下几种情况:
(1)当 n=1 时,不论 m 的值为多少( m>0) ,只有一种划分即 {1}; 例如上述p(1,1) = 1.全部由1组成。
(2) 当 m=1 时,不论 n 的值为多少,只有一种划分即 n 个 1 ; p(6,1)= {1,1,1,...,1} = 1;
(3) 当 n=m 时,根据划分中是否包含 n ,可以分为两种情况:
(a). 划分中包含 n 的情况,只有一个即 {n} ;
(b). 划分中不包含 n 的情况,这时划分中最大的数字也一定比 n 小,即 n 的所有 (n-1) 划分。
也就是说,q(n,n)代表最大的加数不大于n;
q(n,n-1) 代表最大加数不大于n-1;
1 代表 最大加数为n
因此 q(n,n) =1 + q(n,n-1);
(4) 当 n<m 时,由于划分中不可能出现负数,因此就相当于 q(n,n) =q(n,m) ,(m>n>1);
(5) 但 n>m 时,根据划分中是否包含最大值 m ,可以分为两种情况:
❤(a). 划分中包含 m 的情况,即 {m, {x1,x2,...xi}}, 其中 {x1,x2,... xi} 的和为 n-m ,可能再次出现 m ,因此是( n-m )的 m 划分,因此这种划分个数为 q(n-m, m);包括m的总数就是{x1,x2,... xi} 最大加数不大于m的总数(现在已经有一个m了,从剩下的{x1,x2,... xi}找到不大于m的总数就行)。
(b). 划分中不包含 m 的情况,则划分中所有值都比 m 小,即 n 的 (m-1) 划分,也就是最大数不大于m-1的个数,个数为 q(n,m-1);
因此 q(n, m) = q(n-m, m)+q(n,m-1);
p(n,m) = { 1, m= 1;
| p(n,n) m>n;
| 1+p(n,m-1) n=m;
{ p(n,m-1) +p(n-m,m); n>m>1
int p(int n,int m)
{
if(m=1) return 1;
if(m>n) return p(n,n);
if(m==n) return p(n,m-1)+1;
return p(n,m-1)+p(n-m,m);
}
C-整数划分的更多相关文章
- 51nod p1201 整数划分
1201 整数划分 基准时间限制:1 秒 空间限制:131072 KB 分值: 80 难度:5级算法题 将N分为若干个不同整数的和,有多少种不同的划分方式,例如:n = 6,{6} {1,5} {2, ...
- 2014北大研究生推免机试(校内)-复杂的整数划分(DP进阶)
这是一道典型的整数划分题目,适合正在研究动态规划的同学练练手,但是和上一个随笔一样,我是在Coursera中评测通过的,没有找到适合的OJ有这一道题(找到的ACMer拜托告诉一声~),这道题考察得较全 ...
- 整数划分 (区间DP)
整数划分(四) 时间限制:1000 ms | 内存限制:65535 KB 难度:3 描述 暑假来了,hrdv 又要留学校在参加ACM集训了,集训的生活非常Happy(ps:你懂得),可是他最近 ...
- nyoj 90 整数划分
点击打开链接 整数划分 时间限制:3000 ms | 内存限制:65535 KB 难度:3 描述 将正整数n表示成一系列正整数之和:n=n1+n2+-+nk, 其中n1≥n2≥-≥nk≥1,k≥ ...
- 整数划分 Integer Partition(二)
本文是整数划分的第二节,主要介绍整数划分的一些性质. 一 先来弥补一下上一篇文章的遗留问题:要求我们所取的 (n=m1+m2+...+mi )中 m1 m2 ... mi连续,比如5=1+4就不符合 ...
- 整数划分 Integer Partition(一)
话说今天百度面试,可能是由于我表现的不太好,面试官显得有点不耐烦,说话的语气也很具有嘲讽的意思,搞得我有点不爽.Whatever,面试中有问到整数划分问题,回答这个问题过程中被面试官搞的不胜其烦,最后 ...
- 51nod1201 整数划分
01背包显然超时.然后就是一道神dp了.dp[i][j]表示j个数组成i的方案数.O(nsqrt(n)) #include<cstdio> #include<cstring> ...
- NYOJ-571 整数划分(三)
此题是个非常经典的题目,这个题目包含了整数划分(一)和整数划分(二)的所有情形,而且还增加了其它的情形,主要是用递归或者说是递推式来解,只要找到了递推式剩下的任务就是找边界条件了,我觉得边界也是非常重 ...
- BZOJ1263: [SCOI2006]整数划分
1263: [SCOI2006]整数划分 Time Limit: 1 Sec Memory Limit: 162 MBSubmit: 677 Solved: 332[Submit][Status] ...
- BZOJ 1263: [SCOI2006]整数划分( 高精度 )
yy一下发现好像越小越好...分解成3*3*3*3……这种形式是最好的...然后就是高精度了 ----------------------------------------------------- ...
随机推荐
- Silverlight CheckBoxList
项目要用到复选框,可是在Silverlight中不存在CheckBoxList.通过查阅资料以及依据自己的理解,写了简单演示样例: 1.XAML <UserControl x:Class=&qu ...
- 指尖上的电商---(2)Solr全文搜索引擎的准备工作
Solr是一个基于Lucene的全文搜索引擎.提供了更丰富的搜索语言.更灵活的配置.更高的查询效率. 一句话.与Lucene相比.有过之而无不及.这一节里, 主要谈论两个知识点:Jdk的安装和Tomc ...
- HDU-4866-Shooting(函数式线段树)
Problem Description In the shooting game, the player can choose to stand in the position of [1, X] t ...
- c 计算Fibonacci数列:1,1,2,3,5,8,13……这题也是很经典。
输出数字序列2/,/,/,/,/,/...,输出个数由键盘输入.注意输入使用scanf输入 比如: 输入 3输出为 / / / 输入 输出为 / / / / #include<stdio.h&g ...
- Linux下Apache服务器并发优化
Linux/UnixLinux系统下Apache 并发数的优化 Apache Http服务器采用prefork或者是worker两种并发控制模式. preforkMPM 使用多个子进程,每个子进程只 ...
- 设计模式值六大原则——接口隔离原则 (ISP)
接口隔离原则 Interface Segregation Principle 定义: 客户端不应该依赖它不需要的接口 类间的依赖关系应该建立在最小的接口上 我们可以把这两个定义概括为一句话:建立 ...
- Introduction to Guid ( globally unique identifier )
什么是 GUID? 全球唯一标识符 (GUID) 是一个字母数字标识符,用于指示产品的唯一性安装. 在许多流行软件应用程序(例如 Web 浏览器和媒体播放器)中,都使用 GUID. GUID 的格式为 ...
- 高级UNIX环境编程2
perror("error:") ; strerror 日历时间:time_t (1970.1.1开始的秒数) struct timeval (秒数和微秒) struc ...
- centos下网络代理服务器的配置
一.临时生效,只在当前用户当前打开的shell终端下生效 在当前控制台下执行如下命令 export http_proxy=http://username:password@proxy_ip:port/ ...
- android 修改背景色(转)
修改为黑底白字 修改AndroidManifest.xml把android:theme="@style/AppTheme" 修改为android:theme="@andr ...