对放苹果和数字划分的理解

这两个题是经典题 半年前弄懂了 最近又碰到又发现自己忘了公式了

f(m,n) = f(m,n-1)+f(m-n,n);

m是苹果个数 n是盘子个数
f(m,n-1)的意思是至少空着一个盘子 那么就只要把m个苹果放进n-1个盘子里就可以了 当年的我还不理解为什么至少有一个盘子为空只要f(m,n-1)就可以了 总觉得要f(m,n-x) x从1到n-1 但是首先我们可以发现把根据上面的递归公式 f(m,n-1)里会出现f(m,n-2)以此类推 其次从字面上理解 就算要计算有两个盘子为空 是不是也是至少有一个有一个盘子为空 所以其实有盘子为空 等价于至少有一个盘子为空
f(m-n,n) 的意思是一个盘子也不空 所以每个盘子至少放一个 这个应该好理解
然后递归边界

m<n return f(m,m) 
m==0 return 1
n==1 return 1

如果苹果数小于盘子数 那么多余的空盘子其实可以扔了
如果苹果没了 说明分完了 情况数+1
如果只有一个盘子了 也就是只有一种放法了 即剩下的苹果都放进去

我还想过

m==1 return 1
n==0 return 1

好像也没错?但是仔细想想就会发现 当只剩下一个苹果的时候真的只有一种情况吗?显然 这个苹果放到不同的盘子里会有不同的效果 所以是不确定的
当盘子用完了 那么就是一种新情况吗? 我们确定的只有盘子用完了 那么如果苹果没有用完 又要把它放到哪里去呢 所以也是不对的

至于数字划分 不同题目有不同要求 比如有些题目问划分成n个数字的情况 那么就是放苹果问题的另一种叫法 有些题目问所有情况的数目 那么就是n从1到m f(m,n)的和
突然想起自己收藏夹里有一个别人做的总结。。。
划分数系列问题

猜你喜欢

转载自blog.csdn.net/yyyccww/article/details/75244435