不知道咕了多长时间的题。。。

讲了3遍,还是自己搞懂了。。

暂时没有找到题目链接

题意:

n×m的网格,每个格子填[1,x]的数,使得不存在两行两列同构。

先保证一个,行相同。

再容斥掉列。

枚举至多可以分成k个等价类。S表示第二类斯特林数

$ans=\sum_{k=1}^{m}C(x^k,n)\times S(m,k)\times (-1)^{m-k}$

为了使得每个方案,假设有t个实际列的等价类,使得被统计的$2^{m-k}$(就是每个相邻的列能否合并成一个等价类)配上系数,$\sum_{i=0}^{m-t}C(m-t,i)\times (-1)^{m-t-i}=0$

所以注意这里是$(-1)^{m-k}$


upda:2019.7.8

上面除了题意都在fp

感谢Vixbob提出写错了,发现是理解大错特错了

令(n,m,x)(表示n行m列填[1,x]时候的问题)

考虑定义g[m]表示(n,m,x)并且随意填且行相同,

显然g[m]=C(x^m,n)*n!

定义f[m]表示(n,m,x)的答案

有$g[m]=\sum_{i=1}^m S(m,i)f[i]$

为什么统计了$S(m,i)$次?

考虑钦定对应关系。每个$g[m]$划分出等价类之后,每个等价类按第一次出现顺序拼在一起,构成一个$f[i]$

每个$f[i]$一定会被统计$S(m,i)$次

然后斯特林反演即可

保证行相等,

列同构?等价类?

考虑随便填包含了哪些真实的答案。发现就是斯特林数作为系数。

列用斯特林反演。

然后题目连接:https://vjudge.net/problem/TopCoder-13444

05-23 18:06