首页 > 代码库 > 华为OJ:2041 放苹果
华为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)); } }
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。