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

浙公网安备 33010602011771号