zoukankan      html  css  js  c++  java
  • 算法笔记——整数划分2

    题目来源:NYOJ176

    问题描述:

      把一个正整数m分成n个正整数的和,有多少种分法?

      例:把5分成3个正正数的和,有两种分法:

        1 1 3

        1 2 2

    输入:

      第一行是一个整数T表示共有T组测试数据(T<=50)
      每组测试数据都是两个正整数m,n,其中(1<=n<=m<=100),分别表示要拆分的正数和拆分的正整数的个数。

    输出:

      输出每组拆分的方法的数目。

    分析:

      题目可以换种等价描述:把m个同样的苹果放在n个同样的盘子里,不允许有的盘子空着不放,问共有多少种不同的分法,其中n个盘子是完全等价的?

      假设用f(m,n)表示将m个苹果放入n个盘子中的方法,那么可以得到下面的递推关系式:

        1、m < n时, f(m,n) = 0,因为不允许盘子空着;

        2、m = n时, f(m,n) = 1,为了保证没有盘子空着,只能每个盘子放一个;

        3、m > n时,先向每个盘子里面放入1个苹果,还剩下m-n个苹果,剩下的m-n个苹果可以选择放在1个、2个……n个盘子里,所以有:

          f(m,n) = f(m-n,1) + f(m-n,2)+……+f(m-n,n)

        4、初始条件:

          当n=1时,f(m,n)=1,即只能将m个苹果放入这一个盘子中;

    代码:

      根据上面的递推式,同样可以写出递归和递推的代码。  

      递推代码见github:整数划分2

  • 相关阅读:
    Mysql 创建表
    oracle数据库 ORA-01017的解决办法
    用Html创建简历
    Mysql 基本的增删改查
    Linux 基本操作
    几乎百度
    测试第二天
    java map接口,可变参数,Collections集合工具类
    java set接口
    java List接口
  • 原文地址:https://www.cnblogs.com/DwyaneTalk/p/4617131.html
Copyright © 2011-2022 走看看