• 2022-06-30
    请看下面的问题描述:把M个同样的乒乓球放在N个同样的盒子里,允许有的盒子空着不放,问共有多少种不同的分法?(注意必须是不同的分法,例如M=7,N=3时,三个盒子分别放5个、1个、1个这种情况,和三个盒子分别放1个、1个、5个这种情况视同相同放法)这里采用动态规划求解该问题。引入二维数组c,其中c[i][j]表示将i个乒乓球放在j个盒子里的不同的方案个数,请给出状态转移方程及边界条件,并给出用动态规划法求解该问题的核心函数(即为二维数组c填充的函数),并分析该函数的时间复杂度。提示:如果乒乓球数大于等于盒子数,则有两种可能,一种是至少有一个盒子没有装乒乓球,一种是每个盒子都至少装了一个乒乓球,那么从所有的盒子中拿走一个乒乓球,不影响放法的数量。如果乒乓球数i小于盒子数j,必然至少有j-i个盒子没有乒乓球。边界条件考虑四种情况,1、没有盒子的时候,不存在放法;2、只有1个盒子时,所有的乒乓球只能放在这个盒子;3、没有乒乓球的时候,所有的盒子都是空的,4、只有一个乒乓球时,某个盒子放一个乒乓球,其他盒子没有乒乓球。[/i]