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

    题目来源:POJ1664-放苹果 和POJ3014

    问题描述:

      把m个同样的苹果放在n个同样的盘子里,允许有的盘子空着不放,问共有多少种不同的分法?(用K表示)5,1,1和1,5,1 是同一种分法。

    输入:

      第一行是测试数据的数目t(0 <= t <= 20)。以下每行均包含二个整数m和n,以空格分开。1<=m,n<=10。

    输出:

      对输入的每组数据m和n,用一行输出相应的K。

    分析:

      问题描述转换成整数划分形式:把一个正整数m分成至多n个正整数的和,有多少种分法?

      假设用f(m,n)表示将m个苹果放入n个盘子中的方法,n个盘子可以分为有空的和没有空的两种情况,那么可以得到下面的递推关系式:

        1、当m < n时,则必有盘子空着,假设某个盘子空着,将m个苹果放入剩下的n-1个盘子中:

          f(m, n) = f(m, n-1)

        2、当m = n时,没有盘子空只存在每个盘子一哥苹果的情况。对于存在盘子空着的情况,假设某个盘子空着,将m个苹果放入剩下的n-1个盘子中:

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

        3、当m > n时,没有盘子空着,则先每个盘子放一个苹果,剩下的m-n个在放入n个盘子中。对于存在盘子空着的情况,假设某个盘子空着,将m个苹果放入剩下的n-1个盘子中:

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

        初始条件:

          n = 1时,f(m, n) = 1;

    代码:

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

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

  • 相关阅读:
    黄金点游戏
    wc
    自动生成简单四则运算
    第三章 软件工程师的成长 案例分析
    Y2K问题
    我们自己写代码的时候,是否考虑到如何让代码容易于阅读和维护呢?
    关于软件工程师的思维误区问题
    JAVAEE 第七周
    JAVAEE 第六周
    JAVAEE 第五周
  • 原文地址:https://www.cnblogs.com/DwyaneTalk/p/4617206.html
Copyright © 2011-2022 走看看