题目

m个苹果放在n个盘子中有多少种结果,前置条件:

  • 允许存在空盘
  • 重复的摆放结果忽略不计

根据题意,也就是有3种情况,的确完全重复的摆放方式是没多大意义的

思路

这题可以用枚举的描述方式进行尾递归求解:

  • 情况一:

    • 存在一个空盘,甚至没有苹果或一个苹果,直接返回 1
  • 情况二:
    • 连盘子或苹果都没有,直接返 0
  • 情况三:
    • 可能有n个盘子只摆放了一个苹果,m-n的摆放占位,剩下的苹果任意摆放
  • 情况四:
    • 可能n个盘子为空,n-1,减去这空盘,剩下的m个苹果随意放置
  • btw,存在一个以上的空盘摆放方式与图上的重复摆放方式是等价的,尾递归甚至效率并不比循环低,说了这么多,研究此类问的方法还是DP(动态规划)

将上述情况三、四二者相加就是总的所有方法(结果)

实现

package com.test.dp;

import org.junit.Test;

public class AppleOnDiskTest {
    @Test
    public void main(){
        System.out.println(dp(5,0));
    }

    /**
     *
     * @param m apple
     * @param n disk
     * @return
     */
    private int dp(int m,int n){
        if (m <= 0 || n <= 0)
            return 0;
        if (m == 0 || n == 1)
            return  1;
        else
        return dp(m-n,n) + dp(m,n-1);
    }
}

模拟递归的方式求解方式

m个苹果放在n个盘子中有多少种结果的更多相关文章

  1. m个苹果放在n个盘子里面有多少种放法?(动态规划)

    m个苹果放在n个盘子里面有多少种放法?(动态规划) 实现代码如下: #include <iostream> using namespace std; int s(int m ,int n) ...

  2. 放苹果问题 DP计数 m个苹果放在n个盘子里,苹果,盘子相同,盘子可为空

    详细的解释放苹果问题的链接:苹果可相同可不同,盘子可相同可不同,盘子可空和不可空,都有详细的说明··· http://www.cnblogs.com/celia01/archive/2012/02/1 ...

  3. m个苹果放在n个筐里,每个筐至少一个,所有的筐都一样,有多少种放法

    package com.study; import java.io.BufferedReader; import java.io.IOException; import java.io.InputSt ...

  4. ASP.NET MVC中有四种过滤器类型

    在ASP.NET MVC中有四种过滤器类型

  5. ECMAScript中有两种属性:数据属性和访问器属性。

    ECMA-262定义这些特性是为了实现JavaScript引擎用的,因此在JavaScript中不能直接访问它们.为了表示特性是内部值,该规范把它们放在了两对儿方括号中,例如 [[Enumerable ...

  6. Java语言中有4种访问修饰符

    转载:http://wuhaidong.iteye.com/blog/851754 Java语言中有4种访问修饰符 在Java语言中有4中访问修饰符:package(默认).private.publi ...

  7. java中有几种类型的流?JDK为每种类型的流提供了一些抽象类以供继承,请说出他们分别是哪些类?

    java中有几种类型的流?JDK为每种类型的流提供了一些抽象类以供继承,请说出他们分别是哪些类? Java中的流分为两种,一种是字节流,另一种是字符流,分别由四个抽象类来表示(每种流包括输入和输出两种 ...

  8. SQLServer 中有五种约束, Primary Key 约束、 Foreign Key 约束、 Unique 约束、 Default 约束和 Check 约束

    一直在关注软件设计方面,数据库方面就忽略了很多,最近在设计数据库时遇到了一些小麻烦,主要是数据库中约束和性能调优方面的应用,以前在学习 Sql Server 2000,还有后来的 Sql Server ...

  9. iOS - UITableView中有两种重用Cell的方法

    UITableView中有两种重用Cell的方法: - (id)dequeueReusableCellWithIdentifier:(NSString *)identifier; - (id)dequ ...

随机推荐

  1. PS快捷键和常用小知识

    1.快捷键: ctrl+引号 隐藏参考线 ctrl+冒号 隐藏网格线 ctrl+alt 复制选中区域 ctrl+alt+向下箭头 针对单行和单列选框复制移动 ctrl+shift+i 反向选择区域 c ...

  2. HDU 1160(两个值的LIS,需dfs输出路径)

    传送门: http://acm.hdu.edu.cn/showproblem.php?pid=1160 FatMouse's Speed Time Limit: 2000/1000 MS (Java/ ...

  3. 安装 centos7

    一.安装 省略前面安装操作,直接进入设置界面: 日期.键盘等设置按默认即可,主要是系统安装位置需要设置,点击 系统安装位置,进入设置 最终完成分区: 点击左上角完成按钮 接受更改 开始安装 设置roo ...

  4. SpringBoot非官方教程 | 第八篇:springboot整合mongodb

    转载请标明出处: 原文首发于:https://www.fangzhipeng.com/springboot/2017/07/11/springboot8-mongodb/ 本文出自方志朋的博客 这篇文 ...

  5. zepto 基础知识(2)

    20.append append(content) 类型:self 在每个匹配的元素末尾插入内容(内部插入).内容可以为html 字符串.dom节点,或者节点组成的数组. $('ul').append ...

  6. Java解决跨域问题

    同源 URL由协议, 域名, 端口组成. 如果两个URL的协议, 域名, 端口相同, 那么这两个URL为同源. 同源策略 script, iframe, link 可以跨域加载一些静态资源, 比如脚本 ...

  7. Mac上从gitlab上拉项目实战总结

    建立公钥,私钥 https://blog.csdn.net/jigongdajiang/article/details/65441923 2019-01-03 比较喜欢使用图形化界面

  8. linux命令之磁盘和文件系统操作

    1.   fdisk:磁盘分区命令 语法:fdisk [选项][参数] 命令说明:fdisk是linux系统里常用的一种磁盘管理工具,可以创建和管理系统分区 常用命令选项: -l:列出指定的并退出,没 ...

  9. js根据年份获取某月份有几天

    function getNum(year, month) { var temp; month = parseInt(month, 10); temp = new Date(year, month, 0 ...

  10. JS如何给ul下的所有li绑定点击事件,点击使其弹出下标和内容

    这是一个非常常见的面试题,出题方式多样,但考察点相同,下面我们来看看这几种方法:方法一: var itemli = document.getElementsByTagName("li&quo ...