题目描述:
把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); } }