放苹果 问题

原创 2015年11月18日 18:25:22

描述:把M个同样的苹果放在N个同样的盘子里,允许有的盘子空着不放,问共有多少种不同的分法?(用K表示)5,1,1和1,5,1 是同一种分法。
输入 每个用例包含二个整数M和N。0<=m<=10,1<=n<=10。<=n<=10<=m<=10
样例输入 7 3
样例输出 8

解题分析:
设f(m,n) 为m个苹果,n个盘子的放法数目,则先对n作讨论,
当n>m:必定有n-m个盘子永远空着,去掉它们对摆放苹果方法数目不产生影响。即if(n>m) f(m,n) = f(m,m)  
当n<=m:不同的放法可以分成两类:
1、有至少一个盘子空着,即相当于f(m,n) = f(m,n-1);
2、所有盘子都有苹果,相当于可以从每个盘子中拿掉一个苹果,不影响不同放法的数目,即f(m,n) = f(m-n,n).
而总的放苹果的放法数目等于两者的和,即 f(m,n) =f(m,n-1)+f(m-n,n)
递归出口条件说明:
当n=1时,所有苹果都必须放在一个盘子里,所以返回1;
当没有苹果可放时,定义为1种放法;
递归的两条路,第一条n会逐渐减少,终会到达出口n==1;
第二条m会逐渐减少,因为n>m时,我们会return f(m,m) 所以终会到达出口m==0.

import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int m = scanner.nextInt(); // 苹果树
        int n = scanner.nextInt(); // 盘子树
        System.out.println(funApple(m,n));
        scanner.close();
    }

    public static int funApple(int m, int n) // m个苹果放在n个盘子中共有几种方法
    {
        if (m == 0 || n == 1) // 因为我们总是让m>=n来求解的,所以m-n>=0,所以让m=0时候结束,如果改为m=1,
            return 1; // 则可能出现m-n=0的情况从而不能得到正确解
        if (n > m)
            return funApple(m, m);
        else
            return funApple(m, n - 1) + funApple(m - n, n);
    }
}

组合数学 - 放苹果问题

点击打开原文章 今天重新看整数划分想到了poj1664,写一下解题报告,免得总忘。 归结为各种分配问题: M个苹果放入N个盘子里 【1】M相同,N相...
  • wyg1997
  • wyg1997
  • 2016年07月30日 10:23
  • 514

POJ 1664 /NYOJ 758 放苹果问题(递归)

分苹果 时间限制:1000 ms  |  内存限制:65535 KB 难度:2 描述 把M个同样的苹果放在N个同样的盘子里,允许有的盘子空着不放,问共有多少种不同的分法? (注意:假如有3个盘子...
  • huihui1094667985
  • huihui1094667985
  • 2016年07月25日 21:38
  • 607

放苹果(递归)

Description把M个同样的苹果放在N个同样的盘子里,允许有的盘子空着不放,问共有多少种不同的分法?(用K表示)5,1,1和1,5,1 是同一种分法。 Input第一行是测试数据的数目t(0 ...
  • MyComeIn
  • MyComeIn
  • 2015年08月04日 22:59
  • 1003

POJ1664 放苹果【组合问题】

题目: Description 把M个同样的苹果放在N个同样的盘子里,允许有的盘子空着不放,问共有多少种不同的分法?(用K表示)5,1,1和1,5,1 是同一种分法。 Input 第一行是测试数...
  • huanghanqian
  • huanghanqian
  • 2016年06月05日 21:51
  • 316

放苹果问题(递归)

/* *问题描述:把M个同样的苹果放到N个同样的盘子里面,问有多少种不同的算法? 注意:5 1 1和1 5 1是同一种放法 输入:输入一个整数表示有几行测试数据,下面每行分别...
  • november_chopin
  • november_chopin
  • 2017年02月17日 11:19
  • 589

<实例>放苹果问题

放苹果问题非递归算法 把M个同样的苹果放在N个同样的盘子里,允许有的盘子空着不放,问共有多少种不同的分...
  • taotao1990228
  • taotao1990228
  • 2014年06月23日 16:15
  • 564

经典递归 苹果的放法

今天看到一个苹果的递归方法,
  • rabbitroom
  • rabbitroom
  • 2014年05月21日 14:16
  • 690

阿里2015Java实习生笔试附加题:放取苹果的多线程问题

题目描述: 用Java模拟一个拿苹果与放苹果的过程。现有一个苹果盒子,最多容纳5个苹果。一个人一直向盒子中放苹果,另一个人一直从盒子中拿苹果。 思路: 典型的生产者与消费者的多线程问题。class ...
  • LeoSha
  • LeoSha
  • 2015年03月22日 10:24
  • 1329

【动态规划】放苹果

题目描述: 把 M 个同样的苹果放在 N 个同样的盘子里,允许有的盘子空着不放,问共有多少种不同的分法? 注意:5、1、1 和 1、5、1 是同一种分法,即顺序无关。 输入描述: 输入包含多...
  • u012351768
  • u012351768
  • 2016年05月29日 20:55
  • 491

线程经典实例——吃苹果问题

自学线程的时候遇到的一个经典案例,贴出来让大家看看: 存在50个苹果,现在有请三个童鞋(小A,小B,小C)上台表演吃苹果。...
  • a2279860a
  • a2279860a
  • 2017年01月18日 10:29
  • 418
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:放苹果 问题
举报原因:
原因补充:

(最多只允许输入30个字)