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

  • 相关阅读:
    关于字节对齐以及内存占用
    关于HandlerThread的分析
    关于栈和队列的相关操作
    自定义控件(View的绘制流程源码解析)
    关于采用github.io搭建个人博客
    算法题解
    关于Android中ArrayMap/SparseArray比HashMap性能好的深入研究
    ADB server didn't ACK * failed to start daemon *
    Handler 、 Looper 、Message
    KMP字符串模式匹配详解(转)
  • 原文地址:https://www.cnblogs.com/DwyaneTalk/p/4617206.html
Copyright © 2011-2022 走看看