zoukankan      html  css  js  c++  java
  • 华为OJ之放苹果

    题目描述:

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

    题目分析:

    本题实际上是一个划分问题,借助于递归这个强大的工具,我们可以比较容易地进行解决,具体分析思路如下:

    1,我们用f(m, n)来表示m个苹果,n个篮子的情况;

    2,出口条件:当m <= 1时f(m, n) = 1, 当n = 1时f(m, n) = 1; 

    3,当n > m时,无论怎么放置,总会有(n - m)个篮子为空,那么去掉这些篮子也不会对总的放置种类有什么影响,即f(m, n) = f(m, m);

       当 n <= m时,又分为两种情况:

       3-1,所有的篮子都不会为空,此时相当于每个篮子都至少会有一个苹果,那么去掉这些苹果,总的放置种类也不会改变,即即f(m, n) = f(m - n, n);

       3-2,至少有一个篮子不会为空,那么去掉这个篮子,总的放置种类也不会改变,即即f(m, n) = f(m, m - 1);

         那么总的放置种类数相加即可。

    4,根据3中的分析,递归过程中f(m, n)参数1和参数2都会不断减小,一定会到达出口条件,符合递归的条件。

    代码(Java实现):

     1 import java.util.Scanner;
     2 
     3 public class layApple {
     4     public static void main(String[] args) {
     5         int[] paras = getInput();
     6         System.out.println(findNumsOfLaying(paras[0], paras[1]));
     7     }
     8     public static int[] getInput() {
     9         @SuppressWarnings("resource")
    10         Scanner reader = new Scanner(System.in);
    11         int[] paras = new int[2];
    12         paras[0] = reader.nextInt();
    13         paras[1] = reader.nextInt();
    14         return paras;
    15     }
    16     
    17     public static int findNumsOfLaying(int m, int n) {
    18         if (m == 0 || n == 1) {
    19             return 1;
    20         }
    21         if (n > m) {
    22             return findNumsOfLaying(m, m);
    23         } else {
    24             return findNumsOfLaying(m - n, n) + findNumsOfLaying(m, n - 1);
    25         }
    26     }
    27 }
  • 相关阅读:
    3-05. 寻求倒数第二链线性表K项目(15)(STL list应用 ZJU_PAT)
    springbatch操作CSV文件
    oracle 数据库技术支持生命周期表
    调试经验--硬盘U菜
    hdu149850 years, 50 colors (多个最小顶点覆盖)
    POJ3213(矩阵乘法)
    Cocos2d-x 2.3.3版本 FlappyBird
    POJ 2114 Boatherds 划分树
    jQuery 添加 删除 改动select option
    STL容器存储的内容动态分配情况下的内存管理
  • 原文地址:https://www.cnblogs.com/yonguo123/p/6706793.html
Copyright © 2011-2022 走看看