题目描述:
把M个同样的苹果放在N个同样的盘子里,允许有的盘子空着不放,问共有多少种不同的分法?(用K表示)5,1,1和1,5,1 是同一种分法。
输入
每个用例包含二个整数M和N。0<=m<=10,1<=n<=10。
样例输入
7 3
样例输出
8
思路:m个苹果放到n个盘子,可以拆分问题为有盘子不放苹果,和每个盘子都放苹果
开始想到有盘子不放苹果:即分为有1个,2个,3个...n-1个盘子不放的情况,却产生了重复的数据。
这里只需要记录有一个不放的情况dp[m,n-1],在下轮计算中,会有此基础的dp[m,n-2],即初始问题对应的两个盘子不放的情况;
递推公式:
dp[m,n]=dp[m-n,n]+dp[m,n-1]
dp[m-n,n]即先把每个蓝子都放置一个,达到每个都有的效果,再把剩余的m-n个分到n个篮子
import java.util.Scanner;
public class Main{
public static void main(String[] args){
Scanner scan=new Scanner(System.in);
while(scan.hasNext()){
System.out.println(fun(scan.nextInt(),scan.nextInt()));
}
}
public static int fun(int m,int n){
if(m<0||n<0)
return 0;
if(m==1||n==1)
return 1;
return fun(m-n,n)+fun(m,n-1);
}
}
京公网安备 11010502036488号