将正整数 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-整数划分的更多相关文章

  1. 51nod p1201 整数划分

    1201 整数划分 基准时间限制:1 秒 空间限制:131072 KB 分值: 80 难度:5级算法题 将N分为若干个不同整数的和,有多少种不同的划分方式,例如:n = 6,{6} {1,5} {2, ...

  2. 2014北大研究生推免机试(校内)-复杂的整数划分(DP进阶)

    这是一道典型的整数划分题目,适合正在研究动态规划的同学练练手,但是和上一个随笔一样,我是在Coursera中评测通过的,没有找到适合的OJ有这一道题(找到的ACMer拜托告诉一声~),这道题考察得较全 ...

  3. 整数划分 (区间DP)

    整数划分(四) 时间限制:1000 ms  |  内存限制:65535 KB 难度:3   描述 暑假来了,hrdv 又要留学校在参加ACM集训了,集训的生活非常Happy(ps:你懂得),可是他最近 ...

  4. nyoj 90 整数划分

    点击打开链接 整数划分 时间限制:3000 ms  |  内存限制:65535 KB 难度:3 描述 将正整数n表示成一系列正整数之和:n=n1+n2+-+nk,  其中n1≥n2≥-≥nk≥1,k≥ ...

  5. 整数划分 Integer Partition(二)

    本文是整数划分的第二节,主要介绍整数划分的一些性质. 一 先来弥补一下上一篇文章的遗留问题:要求我们所取的 (n=m1+m2+...+mi )中  m1 m2 ... mi连续,比如5=1+4就不符合 ...

  6. 整数划分 Integer Partition(一)

    话说今天百度面试,可能是由于我表现的不太好,面试官显得有点不耐烦,说话的语气也很具有嘲讽的意思,搞得我有点不爽.Whatever,面试中有问到整数划分问题,回答这个问题过程中被面试官搞的不胜其烦,最后 ...

  7. 51nod1201 整数划分

    01背包显然超时.然后就是一道神dp了.dp[i][j]表示j个数组成i的方案数.O(nsqrt(n)) #include<cstdio> #include<cstring> ...

  8. NYOJ-571 整数划分(三)

    此题是个非常经典的题目,这个题目包含了整数划分(一)和整数划分(二)的所有情形,而且还增加了其它的情形,主要是用递归或者说是递推式来解,只要找到了递推式剩下的任务就是找边界条件了,我觉得边界也是非常重 ...

  9. BZOJ1263: [SCOI2006]整数划分

    1263: [SCOI2006]整数划分 Time Limit: 1 Sec  Memory Limit: 162 MBSubmit: 677  Solved: 332[Submit][Status] ...

  10. BZOJ 1263: [SCOI2006]整数划分( 高精度 )

    yy一下发现好像越小越好...分解成3*3*3*3……这种形式是最好的...然后就是高精度了 ----------------------------------------------------- ...

随机推荐

  1. hdu5188 加限制的01背包问题

    http://acm.hdu.edu.cn/showproblem.php? pid=5188 Problem Description As one of the most powerful brus ...

  2. EF使用时异常:对一个或多个实体的验证失败。有关详细信息

    //最顶级异常中是不提示具体哪个字段验证失败,必须到详细异常类型中查看 try { //EF操作 } catch (System.Data.Entity.Validation.DbEntityVali ...

  3. HDU 2023题解分析

    我想说这道题我还没弄明白我错哪了,交了20多遍一直都是Runtime Error,改了N次还是不对,后来搜了一下,说是数组开小了,又把数组开大,还不对,又改发现一个平均值求错,再改,还不对,洗洗睡吧. ...

  4. C#变量命名规范

    1.1命名 1.  所有命名必须有意义 2.  成员变量声明在类的顶端,并且每个变量一行 3.  局部变量声明在引用之前 1.1.1  常量命名 1.  常量名用全大写:MAX_PARAMETER_C ...

  5. Nginx简单操作

    Nginx简单操作 平滑重启:读取配置文件,正确后启动新nginx,关闭旧服务进程 # kill HUP nginx.pid # /usr/sbin/nginx -c /etc/nginx/nginx ...

  6. Centos6 安全防护设置指南

    参考博文: Centos 6.4安全防护设置指南 4.使用chattr命令给下列文件加上不可更改的属性 有效防止非法用户进行文件的修改. [root@localhost ~]# chattr +i / ...

  7. Python之路:Python简介

    Python前世今生 python的创始人为吉多·范罗苏姆(Guido van Rossum).1989年的圣诞节期间他为了在阿姆斯特丹打发时间,决心开发一个新的脚本解释程序,作为ABC语言的一种继承 ...

  8. Week15(12月16日):授课综述1

    Part I:提问 =========================== 1.(   )类提供了一个对Entity Framework的抽象,能够进行数据持久化并接受数据. A.Layout    ...

  9. chrome developer tool 调试技巧2

    我大概是从 08.09 年从 Firebug 转入 Chrome Developer Tool,一直用到现在,越用越喜欢.我平时调错时常用的功能有: 代码格式化可以将被压缩的代码自动展开 实时代码编辑 ...

  10. spring 事务 笔记3.1

    Spring事务 以前的事务都是编程式事务,需要开启和关闭,然后程序写在这里面 spring,声明式事务 Spring事务隔离级别 DEFAULT 使用数据库默认隔离级别 READ_UNCOMMITT ...