摘要:
解:观察一波部分分。 首先小数据直接暴力4n,然后考虑背包。设f[i][a][b][c]表示前i个学校中前三位导师分别有多少人,第四位导师可以直接推出来。 然后暴力枚举每一个人放在哪进行背包。 进一步发现,因为限制条件全是跟行列有关的,所以我们设f[i][a][b]表示前i个学校,第一列和第一行分别 阅读全文
摘要:
解:发现我们对a和b做一个集合卷积,对d和e做一个^FWT,然后把这三个全部对位乘上斐波那契数,然后做&FWT就行了。 1 #include <bits/stdc++.h> 2 3 const int N = 150010, MO = 1e9 + 7, inv2 = (MO + 1) / 2; 4 阅读全文
摘要:
解:有两种做法...... 第一种,按照秘密袭击coat的套路,我们只需要求出即可。因为一种操作了i次的方案会被恰好计数i次。 那么这个东西怎么求呢?直接用FWT的思想,对于一个状态s,求出选择s所有子集的概率ps。那么第i次操作后是s的子集的概率就是psi。 设fs表示第i次操作之后是s的子集的概 阅读全文
摘要:
解:有一个很显然的状压...... 就设f[s]表示选的点集为s的时候所有方案的权值和。 于是有f[s] = f[s \ t] * (sum[t] / sum[s])P。 这枚举子集是3n的。 然后发现这是子集卷积,参考资料。 于是就FWT搞一下...看代码 1 #include <bits/std 阅读全文