关于小球放箱子的8种情况解法及证明


前言

我只是个小蒟蒻,所以数论证明方面嘛 . . .. ..比较感性,可能不严谨
倘若有哪些大佬发现有 b u g bug bug,那欢迎提醒我


正题

因为在周末比赛时遇上了一道JZOJ 4786
此题便用到了这个知识,但上网去百度 . . .. ..
结果冒出来一堆野鸡,贴公式一个比一个熟练,但对于证明却只口未提
所以为了方便各位,便在感悟后 m a r k mark mark


真·正题

前置

设有 n n n个小球, m m m个箱子
f [ i ] [ j ] f[i][j] f[i][j]表示在有 j j j个箱子的情况下放入 i i i个小球的方案数


球同,箱同,允许有空箱:

我们开始考虑动态转移方程:
我们从限制入手:允许有空箱。即可有可无,对于无的情况,假设有 j j j个箱子,我们大可以在操作前先保证每个箱子内有 1 1 1个球,所以要放入的球就从 i i i变成 i − j i-j ij;对于有的情况,就很好考虑了。因为可以有空箱,那么就直接加上一个箱子,让 i i i个小球自己去排(因为之前的 d p dp dp必定会使其有解)。
现在动态转移方程便呼之欲出了:
{ f [ i ] [ j ] = f [ i ] [ j − 1 ] + f [ i − j ] [ j ] ( i &gt; = j ) f [ i ] [ j ] = f [ i ] [ j − 1 ] ( i &lt; j ) \left\{\begin{matrix} f[i][j]=f[i][j-1 ]+f[i-j][j](i&gt;=j) \\ f[i][j]=f[i][j-1 ](i&lt;j) \end{matrix}\right. {f[i][j]=f[i][j1]+f[ij][j](i>=j)f[i][j]=f[i][j1](i<j)
而初始化则是 f [ 1 ] [ i ] = f [ 0 ] [ i ] = 1 ( i : 0 — m ) f[1][i]=f[0][i]=1(i:0—m) f[1][i]=f[0][i]=1(i:0m) f [ i ] [ 1 ] = 1 ( i : 1 — n ) f[i][1]=1(i:1—n) f[i][1]=1(i:1n)


球同,箱同,无空箱:

这种情况我们在上一种已经进行了讨论,所以这里就直接给出方程了
f [ i ] [ j ] = f [ i − j ] [ j ] ( i &gt; = j ) f[i][j]=f[i-j][j](i&gt;=j) f[i][j]=f[ij][j](i>=j)


球不同,箱同,允许有空箱:

还是喜闻乐见的动态方程讨论:
假如箱子数没有变化,对于新加入的球,无论放在哪个箱子都会是一种全新方案即 j ∗ f [ i − 1 ] [ j ] j*f[i-1][j] jf[i1][j]
若箱子数发生变化,那么这个新放入的球就必须待在新来的箱子里
f [ i ] [ j ] = j ∗ f [ i − 1 ] [ j ] + f [ i − 1 ] [ j − 1 ] f[i][j]=j*f[i-1][j]+f[i-1][j-1] f[i][j]=jf[i1][j]+f[i1][j1]
A n s = ∑ i = 1 m f [ n ] [ i ] Ans=\sum_{i=1}^mf[n][i] Ans=i=1mf[n][i]


球不同,箱同,无空箱:

因为不能存在空箱的情况,也就是说我们只有让 m m m个箱子都有球才符合,所以按照上一种的方法 d p dp dp,统计答案时就直接是 f [ n ] [ m ] f[n][m] f[n][m]


球同,箱不同,允许有空箱:

对于 n n n个球来说,就会存在 n − 1 n-1 n1个位置,而因为我们只有 m m m个箱子,所以只要 m − 1 m-1 m1个位置便可以成功的将小球分成 m m m份。但因为可以有空箱,那么情况就会变得十分特殊,所以我们可以强行添加 m m m个球使得每个箱子都会有球,也就是不存在空箱的情况了,这下就巧妙的将特殊化为一般
所以就变成了在 n + m − 1 n+m-1 n+m1个位置中选出 m − 1 m-1 m1的方案数,即 C n + m − 1 m − 1 C_{n+m-1}^{m-1} Cn+m1m1


球同,箱不同,无空箱:

因为一开始就不存在空箱的情况,所以就不需要添加 m m m个虚球,直接用上一种情况一开始提到的就好了,即方案数为 C n − 1 m − 1 C_{n-1}^{m-1} Cn1m1


球不同,箱不同,允许有空箱:

这种情况就十分草率了,对于每个球都可以有 m m m个箱子选择且使得方案不重复
所以解就是 n m n^m nm


球不同,箱不同,无空箱:

让我们再次回到球不同,箱同,无空箱这种情况,与现在这种情况仅仅差了箱子的不同
那么我们大胆地尝试由该种情况直接进行转移。因为考虑的是箱子,所以我们直接对于结果进行考虑。因为箱子的不同,所以在球数一定的情况下,只要换个箱子都会使得方案数改变,而我们可以换且不会发生重复的方案,恰好是 m m m个箱子的全排列
最终的方案数为 f [ n ] [ m ] ∗ m ! f[n][m]*m! f[n][m]m!


总结

感觉思考时最大的体会就是赖皮
跟讲 N I M NIM NIM博弈时运用到的反证法一样,很巧妙,在考虑一种情况时,因为可能会出现特殊情况而导致难度上升,所以我们直接将球预先放好,对特殊情况进行降难度打击

  • 6
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值