• 华为OJ:2041 放苹果


    这道题难点不在于代码怎么写,而是思路怎么想。

    感觉一般这样的题要么你理好一个思路要么你最后总结出一个公式,要么你自己模拟它的运作方式,用迭代,或者递归的方式来做。

    有点像我们曾经学的排列组合。

    对于m个苹果。n个盘子f(m,n)。假设苹果个数比盘子少,那么就跟n个盘子,n个苹果是一样的f(n,n)。假设m比n大。那么有两种情况,一种有空盘子的情况。一种没有空盘子的情况,两种情况不重叠且加一起一定为情况总数。

    第一种情况就即为n个盘子放在m-1个盘子里,由于至少有个空盘子。

    f(m。n-1),另外一种情况下,每一个盘子都有一个苹果了,就相当于f(m-n,n),m扣掉n个苹果再放到n个盘子里。得到递归式f(m,n)=f(m,n-1)+f(m-n,n)。

    import java.util.Scanner;
    public class MNAPPPLE {
    	public static int fways(int m,int n){
    		if(m==0||n==1)return 1;
    		if(m<n)return fways(m,m);
    		else return fways(m,n-1)+fways(m-n,n);
    	}
    	
    	public static void main(String args[]){
    		Scanner input=new Scanner(System.in);
    		int m=input.nextInt();
    		int n=input.nextInt();
    		System.out.println(fways(m,n));
    	}
    }
    

  • 相关阅读:
    HTML区块
    HTML表单
    JavaScript 表单验证
    HTML头部
    JavaScript
    设计模式—单例模式的六种写法
    new
    new
    new
    new
  • 原文地址:https://www.cnblogs.com/yxwkf/p/5269036.html
Copyright © 2020-2023  润新知