zoukankan      html  css  js  c++  java
  • 整数划分问题

    整数划分问题是算法中的一个经典命题之一。整数划分是指把一个正整数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

    如果{n1,n2,···,ni}中的最大加数s不超过m,即s=max(n1,n2,···,ni)≤m,则称它属于n的一个m划分。记n的m划分个数为f(n,m)。该问题就转化为求n的所有划分个数f(n,n)。可以建立f(n,m)的递归关系如下:

    1,f(1,m)=1,m≥1

    2,f(n,1) =1,n≥1

    3,f(n,m)=f(n,n),m≥n

    4,f(n,n)=1+f(n,n-1)

    5,f(n,m)=f(n,m-1)+f(n-m,m),n>m>1

    代码的实现

    int split(int n,int m)
    {
        if(n==1||m==1) return 1;
        else if(n<m) return split(n,n);
        else if(n==m) return split(n,n-1)+1;
        else return split(n,m-1)+split(n-m,m);
    }
  • 相关阅读:
    js加法计算器
    js基础语句
    箭头点击左右滚动-18
    返回头部,滚动显示-17
    图片定位一个地方
    最值一看专题图片轮播图-16
    右侧常用浮动导航,返回顶部-15
    产业带多种轮播效果,头部效果-14
    分辨率判断-13
    图片自动滚动,鼠标滑过悬停-12
  • 原文地址:https://www.cnblogs.com/pshw/p/4838898.html
Copyright © 2011-2022 走看看