近期总结

7.31:
1、(p-2)!%p=1  (p为质数) 感性证明:2~p-2中每个数必然存在它的逆元,互相抵消为1

2、费用流建图时,要让一个点只能经过一次,且有相关费用,可以将它拆成两个点,用中间的边(流量1)来限制(经过这条边才表示真正经过这个点)。

3、最小最大想二分

8.1:

1、最长反链长度(即一个有向无环图中,选出最多的点,使得点互不到达)=最小链覆盖(用最小数量的链,覆盖整个图,使得每个点至少经过一次)

最小链覆盖怎么求呢?先把它转化为最小路径覆盖(定义类似,但保证每个点严格经过一次,转化方法就是n^2或n^3(直接floyed)搞出每个点能直接或间接到达的点,重新连边),然后拆点做匈牙利(即每个点都可以作为起点一次和终点一次的匈牙利),最小路径覆盖=点数-最大匹配数 (感性理解:一开始假装每个点都是一条路径,然后每找到一个匹配,就相当于将两条路径合并为一条,所以找到多少个匹配,总点数就要减去多少,得到答案。

扩展:给定n个点,已知选了一个点i,就不能选ai集合中的所有点,求最多能选多少个点?

(给对应关系连边,将问题转化为求最长反链长度,按照上面即可

2、给出n个位置,每个位置上有数字a1~n,每次可以将任意一个位置上的数字减去1,但不能连续两次减同一个位置的数字,求将所有位置的数字减至0的方案数。

转化,每次减去某个位置的数,相当于在一个序列中记下该位置,要使序列中相邻的位置不同。考虑dp,设f[i][j]表示当前处理到第i个位置,得到j个非法空(即连续的同个位置在序列中出现) ,枚举p,q,分别表示当前把i分配给p个空,包含q个非法空区域在内

那么转移到j-q+a[i]-p(删去了q个非法空,a[i]-p的部分就是新的非法空)

方程f[i][j-q+a[i]-p]+=f[i-1][j]*C(j,q)*C(s-j,p-q)*C(a[i]-1,p-1) (j个非法空中取q个,s-j个合法空中取p-q,将a[i]个数分配到p个空中)

写得有点凌乱 建议看原题http://120.77.82.93/senior/#main/show/3424

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章