盒球问题

n 个球 和 m 个盒子相关问题的个人理解。


1.球不同盒不同,可空。

n 个都能放到 m 个里:\(m^n\)

2.球同盒同,可空。

分类讨论。类似于 dp,设 \(f[i][j]\) 表示 i 个球放到 j 个盒里方案数。

\(n < m:f(n, m) = f(n, n)\)

\(n >= m:\)
有空的:\(f(n, m) = f(n, m - 1)\),m - 1 就是让盒子有空。因为递推中每次都会考虑,所以每种空的情况都会统计。

没有空的:\(f(n, m) = f(n - m, m)\),就是让 m 个盒子都先放上一个球,这样就能保证不空。

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

3.球同盒同,不空。

\(n < m\) 无解。

否则:\(f'(n, m) = f(n - m, m)\)。 其中 \(f\) 含义同 2 中含义(可空),\(f'\) 在这里指本题式子(不可空)。表示:每个盒子先填一个球,对于剩下的球可以有空,直接根据 2 的解法塞到盒子里就行。

紧扣 dp 定义的含义,子问题和原问题性质是否一样?不要弄混。

4.球同盒不同,不空。

插板法:\(C_{n - 1}^{m - 1}\)

怎么保证答案正确?

要求不空:则板只能在 n - 1 个空中。

分成 m 份:在空中塞 m - 1 个板。易证。

5.球同盒不同,可空。

发现和上面问题的区别在于多了可以为空的条件。

那么先放 m 个球,保证每个空都有球。然后根据上面的结论,处理 n + m 个球放到 m 个盒子里,不能有空。

\(C_{n + m - 1} ^ {m - 1}\)

6.球不同盒同,不空。

递推。第一个:开一个盒子;第二个:开一个盒子 or 和 1 放在一起;第三个:开一个盒子 or 和 2 放在一起 or 和 1、2放在一起。

....

所以它和别人共用一盒:\(f(n, m) = f(n - 1, m) * m\),乘上 m 是因为,虽然盒同但是球不同。在前面有 m 种盒。

它自己开了一新盒:\(f(n, m) = f(n - 1, m - 1)\)

综上:\(f(n,m) = f(n - 1, m) * m + f(n - 1, m - 1)\)

补充:递推式正是第二类斯特林数。

7.球不同盒同,可空。

考虑以盒子为整体,看盒子:空 1 个,空 2 个,空 ... m - 1 个。

然后枚举非空盒子(直接把空盒子摘出去了),把球放过去。

\(f'(n, m)\) 表示球不同盒同,可空时的方案数。下面式子中的 \(f(n, m)\) 含义同 6 中含义。

根据 6 易得:\(f'(n, m) = \sum_{i = 1}^m f(n, i)\)。表示枚举非空盒子个数,然后按照 6 处理。

8.球不同盒不同,可空。

和 7 的区别在于盒不同。

那就将 7 的答案乘上盒子的全排列,相当于全排一遍,其他均相同。

另 f''表示球不同盒不同可空的方案数,f''的含义于 7 中相同。

\(f''(n, m) = f'(n, m) \times m!\)


并不能想出来其他上面方案....几乎是想出来一个很快就被自己否掉了。我觉得以上应该算这种问题的通解,感觉无论是思路上还是复杂度上大概率都不会有更优的了()。

posted @ 2023-07-06 11:52  Moyyer_suiy  阅读(96)  评论(0)    收藏  举报