博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
算法分析——N个苹果放在N个盘子里的问题
阅读量:5297 次
发布时间:2019-06-14

本文共 1145 字,大约阅读时间需要 3 分钟。

问题的描述:现在有N个一模一样的苹果,要放在编号为1、2、3……、N的盘子里(假设盘子足够大,能放下所有的苹果),问一共有多少种放法?

 

算法分析:

用符号F(i,j)表示i个苹果放在j个盘子里的放法数

如果1号盘子里没有苹果,则i个苹果要放在剩余的j-1个盘子里

如果1号盘里有1个苹果,则剩余的i-1个苹果放在剩余的j-1个盘子里

如果1号盘里有2个苹果,则剩余的i-2个苹果放在剩余的j-1个盘子里

以此类推

如果1号盘里有i-1个苹果,则剩下的1个苹果放在j-1个盘子里

如果1号盘里有i个苹果,则剩下的j-1个盘子里没有苹果

 

于是得到以下的关系式

F(i,j)=F(i,j-1)+F(i-1,j-1)+F(i-2,j-1)+……+F(1,j-1)+F(0,j-1)

由上面的式子可以得出

F(i-1,j)=F(i-1,j-1)+F(i-2,j-1)+……+F(1,j-1)+F(0,j-1)

回代到①可知

F(i,j)=F(i,j-1)+F(i-1,j)

 

另由定义可知,

F(i,1)=1

F(1,i)=i

 

根据式子③④⑤,推测F(i,j)的计算公式为

F(i,j)=C(i,i+j-1) 注:C(M,N)表示组合数,表示N个里面选M的个数。组合数的计算公式这里不描述了

 

下面用数学归纳法证明式子⑥的正确性

证明:

F(i,1)=C(i,i+1-1)=C(i,i)=1 式子④满足式子⑥

F(1,i)=C(1,1+i-1)=C(1,i)=i 式子⑤满足式子⑥

 

假设F(i,j-1)、F(i-1,j)满足式子⑥

F(i,j-1)=C(i,i+j-1-1)=C(i,i+j-2)

F(i-1,j)=C(i-1,i-1+j-1)=C(i-1,i+j-2)

 

则由式子③可知

F(i,j)=F(i,j-1)+F(i-1,j)=C(i,i+j-2)+C(i-1,i+j-2)=C(i,i+j-1) 满足式子⑥

 

由此证明式子⑥的正确性

 

故计算公式为

F(i,j)=C(i,i+j-1)

 

那么

3个苹果放在3个盘子里的放法数为F(3,3)=C(3,3+3-1)=C(3,5)=10

2个苹果放在4个盘子里的放法数为F(2,4)=C(2,2+4-1)=C(2,5)=10

7个苹果放在7个盘子里的放法数为F(7,7)=C(7,7+7-1)=C(7,13)=1716

10个苹果放在10个盘子里的放法数为F(10,10)=C(10,10+10-1)=C(10,19)=92378

 

N个苹果放在N个盘子里的放法数为F(N,N)=C(N,2N-1)

转载于:https://www.cnblogs.com/grenet/archive/2012/11/19/2777200.html

你可能感兴趣的文章
程序集的混淆及签名
查看>>
MATLAB中subplot的用法
查看>>
thinkphp框架 中 ajax 的应用
查看>>
JAVA排序(一) Comparable接口
查看>>
iTerm2 + Oh My Zsh
查看>>
判断9X9数组是否是数独的java代码
查看>>
ExtJS学习之路第一步:对比jQuery,认识ExtJS
查看>>
Leetcode 268 Missing Number
查看>>
00-自测1. 打印沙漏
查看>>
UNITY在VS中调试
查看>>
福建省第八届 Triangles
查看>>
P1182 数列分段`Section II` P1316 丢瓶盖 二分答案
查看>>
更新下载库update绝对详解
查看>>
SDUTOJ3754_黑白棋(纯模拟)
查看>>
Scala入门(1)Linux下Scala(2.12.1)安装
查看>>
laravel
查看>>
installing the matplotlib via pip in the enviroment dos
查看>>
bzoj3312: [Usaco2013 Nov]No Change
查看>>
如何改善下面的代码 领导说了很耗资源
查看>>
Quartus II 中常见Warning 原因及解决方法
查看>>