标签:
题目来源:POJ1664-放苹果 和POJ3014
问题描述:
把m个同样的苹果放在n个同样的盘子里,允许有的盘子空着不放,问共有多少种不同的分法?(用K表示)5,1,1和1,5,1 是同一种分法。
输入:
第一行是测试数据的数目t(0 <= t <= 20)。以下每行均包含二个整数m和n,以空格分开。1<=m,n<=10。
输出:
对输入的每组数据m和n,用一行输出相应的K。
分析:
问题描述转换成整数划分形式:把一个正整数m分成至多n个正整数的和,有多少种分法?
假设用f(m,n)表示将m个苹果放入n个盘子中的方法,n个盘子可以分为有空的和没有空的两种情况,那么可以得到下面的递推关系式:
1、当m < n时,则必有盘子空着,假设某个盘子空着,将m个苹果放入剩下的n-1个盘子中:
f(m, n) = f(m, n-1)
2、当m = n时,没有盘子空只存在每个盘子一哥苹果的情况。对于存在盘子空着的情况,假设某个盘子空着,将m个苹果放入剩下的n-1个盘子中:
f(m, n) = f(m, n-1) + 1
3、当m > n时,没有盘子空着,则先每个盘子放一个苹果,剩下的m-n个在放入n个盘子中。对于存在盘子空着的情况,假设某个盘子空着,将m个苹果放入剩下的n-1个盘子中:
f(m, n) = f(m, n-1) + f(m - n, n)
初始条件:
n = 1时,f(m, n) = 1;
代码:
根据上面的递推式,同样可以写出递归和递推的代码。
递推代码见github:整数划分3
标签:
原文地址:http://www.cnblogs.com/DwyaneTalk/p/4617206.html