• 整数划分问题


    整数划分问题是算法中的一个经典命题之一。整数划分是指把一个正整数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);
    }
  • 相关阅读:
    JavaScript概述
    JavaScript概述
    python语法基础
    python 网络编程
    python 日志模块
    python 异常处理
    python tricks
    记录_省赛(一)
    异或加密算法
    三目条件运算符
  • 原文地址:https://www.cnblogs.com/pshw/p/4838898.html
Copyright © 2020-2023  润新知