开启玄学的数论大门
前言
我只是个小蒟蒻,所以数论证明方面嘛
.
.
..
..比较感性,可能不严谨
倘若有哪些大佬发现有
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
i−j;对于有的情况,就很好考虑了。因为可以有空箱,那么就直接加上一个箱子,让
i
i
i个小球自己去排(因为之前的
d
p
dp
dp必定会使其有解)。
现在动态转移方程便呼之欲出了:
{
f
[
i
]
[
j
]
=
f
[
i
]
[
j
−
1
]
+
f
[
i
−
j
]
[
j
]
(
i
>
=
j
)
f
[
i
]
[
j
]
=
f
[
i
]
[
j
−
1
]
(
i
<
j
)
\left\{\begin{matrix} f[i][j]=f[i][j-1 ]+f[i-j][j](i>=j) \\ f[i][j]=f[i][j-1 ](i<j) \end{matrix}\right.
{f[i][j]=f[i][j−1]+f[i−j][j](i>=j)f[i][j]=f[i][j−1](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:0—m)、
f
[
i
]
[
1
]
=
1
(
i
:
1
—
n
)
f[i][1]=1(i:1—n)
f[i][1]=1(i:1—n)
球同,箱同,无空箱:
这种情况我们在上一种已经进行了讨论,所以这里就直接给出方程了
f
[
i
]
[
j
]
=
f
[
i
−
j
]
[
j
]
(
i
>
=
j
)
f[i][j]=f[i-j][j](i>=j)
f[i][j]=f[i−j][j](i>=j)
球不同,箱同,允许有空箱:
还是喜闻乐见的动态方程讨论:
假如箱子数没有变化,对于新加入的球,无论放在哪个箱子都会是一种全新方案即
j
∗
f
[
i
−
1
]
[
j
]
j*f[i-1][j]
j∗f[i−1][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]=j∗f[i−1][j]+f[i−1][j−1]
而
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
n−1个位置,而因为我们只有
m
m
m个箱子,所以只要
m
−
1
m-1
m−1个位置便可以成功的将小球分成
m
m
m份。但因为可以有空箱,那么情况就会变得十分特殊,所以我们可以强行添加
m
m
m个球使得每个箱子都会有球,也就是不存在空箱的情况了,这下就巧妙的将特殊化为一般
所以就变成了在
n
+
m
−
1
n+m-1
n+m−1个位置中选出
m
−
1
m-1
m−1的方案数,即
C
n
+
m
−
1
m
−
1
C_{n+m-1}^{m-1}
Cn+m−1m−1
球同,箱不同,无空箱:
因为一开始就不存在空箱的情况,所以就不需要添加 m m m个虚球,直接用上一种情况一开始提到的就好了,即方案数为 C n − 1 m − 1 C_{n-1}^{m-1} Cn−1m−1
球不同,箱不同,允许有空箱:
这种情况就十分草率了,对于每个球都可以有
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博弈时运用到的反证法一样,很巧妙,在考虑一种情况时,因为可能会出现特殊情况而导致难度上升,所以我们直接将球预先放好,对特殊情况进行降难度打击