zoukankan      html  css  js  c++  java
  • m个苹果放在n个盘子中有多少种结果

    题目

    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);
        }
    }
    
    

    模拟递归的方式求解方式

    - The End -

    知识共享许可协议 本作品采用知识共享署名-非商业性使用 4.0 国际许可协议进行许可。

  • 相关阅读:
    Django的开发服务的搭建和使用
    Openerp
    Django Url设计 小知识点
    try...finally的用法
    SQL rownum的用法
    oracle 日期常用函數sysdate
    datetime.datetime.now()时间格式转化是碰到的问题
    CSS BACKGROUND汇总
    css3动画效果小结
    javascript花式理解闭包
  • 原文地址:https://www.cnblogs.com/hoochanlon/p/9683062.html
Copyright © 2011-2022 走看看