10-29 题
10-29 题
abc248_g G - GCD cost on the tree
考虑枚举 \(\gcd\) 计算方案数 \(f_i\)。直接计算 \(\gcd\) 不好做,考虑容斥计算 \(g_i\) 表示 \(\gcd\) 为 \(i\) 的倍数时的方案数。则
把所有 \(i\) 的倍数的点取出来,是一个森林,对每棵树做 DP:
每个点的子树维护以它开始的所有链链长和,以及链的数量。转移就用儿子与自己的信息合并。
由于每个点有 \(O(\sqrt V)\) 个因数,因此复杂度是 \(O(V\log V+n\sqrt V)\)。
Problem - 1842G - Codeforces
考虑组合意义,相当于 \(i\) 走到 \(i+1\) 有 \(a_i\) 种方案。考虑对 \(j\) 操作 \(v\),那么相当于在 \(j\) 放一个道具(每个道具是不同的),使得可以在 \(i\ge j\) 的一个 \(i\) 使用这个道具走到 \(i+1\) 而贡献 \(v\) 的方案数(每个道具可以重复使用)。
由于只能最多使用 \(n\) 次道具,于是设关于使用道具次数的 DP。设 \(f_{i,j}\) 表示走到 \(i\) 已经有 \(j\) 个道具被使用过,转移有:
- 不使用道具:\(f_{i,j}\times a_i\to f_{i+1,j}\)。
- 使用以前使用过的道具:\(f_{i,j}\times j\times v\to f_{i+1,j}\)。
- 使用以前未使用过的道具:\(f_{i,j}\times i \times (m-j)\times v\to f_{i+1,j+1}\)。
最后算答案,由于算的是期望,所以要把我们用过的道具的总方案数除掉,即 \(\sum \dfrac {f_{n,i}} {n^i}\)。
abc231_g G - Balls in Boxes
类似上一道题。现在放的这个道具只能被使用一次,且贡献为 \(1\)。有转移:
- 不使用,乘以 \(a_i\)。
- 使用一个道具:\(f_{i,j}\times (K-j)\to f_{i+1,j+1}\)。
最后算答案是一样的。
P2455 [SDOI2006] 线性方程组 - 洛谷
重写一下高斯消元。更换了写法,不用先求出上三角矩阵再消,而是每次就把其他所有行都消掉。
需要判无解和无穷解的情况,共同点是都存在找不到主元的情况,不同点是无解时存在系数全 \(0\) 的行常数不为 \(0\)。
找不到主元可以不管它,先找下一列。可以每次找到一个主元就把计数器加一,把主元交换到计数器的位置,这样做的目的是确保只有计数器之前的行是被固定了的。
abc249_g G - Xor Cards
老规矩先枚举 LCP,然后要选出若干使得 \(\dfrac {a_i}{2^x}\) 的异或和等于 \(\dfrac {K}{2^{x}}\) 且最大化 \(b_i\) 的异或和。
考虑线性基,我们都会 check 一个数能否被异或表示,以及求异或最大值。但其实可以结合一下,我们可以贪心从高位到低位填入最大值的 \(01\),然后 check 这个前缀能否被表示。
用到这道题上,我们可以把 \(a_i,b_i\) 变成一个二进制数,\(\dfrac {a_i}{2^x}\times 2^{30}+b_i\)。然后从高位到低位填入 \(res\) 的第 \(2^i\) 位,每次 check \(\dfrac {K}{2^x} \times 2^{30}+res\) 的 \(i\) 位之前能否被表示。可以做到 \(O(n\log^3 V)\)。
还要特判 \(-1\) 的情况,可以查 \(a_i\) 的异或最小值是否小于等于 \(K\)。
P10780 BZOJ3028 食物 - 洛谷
可以把要求偶数个的与要求 \(0\) 或 \(1\) 个的组合成一个任意个的。特别地把蜜桃多取出来一个变成偶数个。这样能组成四个任意个的。
要计算 \(a+b+c+d=n-1\) 的非负整数解数量,插板即可,答案为 \(\dbinom {n+2}{3}=\dfrac {n(n+1)(n+2)}6\)
P4528 [CTSC2008] 图腾 - 洛谷
容斥:
1324-1243-1432
=(13xx-1342)-(12xx+1234)-(1xx2+1342)
=13xx-12xx+1234-1xx2
=13xx+1234-1xxx+1x2x
先维护 \(ld_i,lu_i,rd_i,ru_i\) 表示左右小于或大于它的个数。分别考虑每种情况:
-
13xx:枚举
3,那么后面先选一个4乘上 \(ru_i\),然后计数132(固定3)。可以计数
12的总数减去312和123。记sum表示小于3的数组成的顺序对数量,则:132 =sum-123-312 =sum-123-(3xx-321) =sum-3xx-123+321求
123相当于计数 \(\sum _{j<i\land a_j<a_i} ld_j\)。计数321是同理的。 -
1x2x:枚举
2,那么第四个位置只要求比2大,乘上 \(ru_i\)。然后计数132(固定2)。132 =xx2-312 =xx2-(x1x-213) =xx2-x1x+213 =xx2-x1x+xx3-123 =xxx-xx1-x1x-123x1x即 $\sum _{j<i\land a_j<a_i} lu_j $。 -
1234。枚举3,前面是123后面是 \(ru_i\)。 -
1xxx容易。
P4707 重返现世
考虑 min-max 容斥。第 \(k\) 大 min-max 容斥公式为(期望下也成立):
我们记一个物品的权值为第一次被选的时间,那么我们要求第 \(k\) 小时间。转化为求第 \(n-k+1\) 大时间,可以用上面的式子。考虑一个集合的最小时间,每一轮获得 \(T\) 中物品的概率为 \(\frac 1m\sum _{i\in T} p_i\),所以 \(E(\min(T))=\dfrac {m} {\sum _{i\in T} p_i}\)。
考虑 DP,我们求答案只跟 \(|T|\) 与元素和有关,所以设 \(f_{i,j,s}\) 表示选了 \(j\) 个,元素和为 \(s\) 的方案数。转移为:选 \(f_{i,j+1,s+p_i}\gets f_{i-1,j,s}\) 或不选 \(f_{i,j,s}\gets f_{i-1,j,s}\)。可以做到 \(O(n^2m)\)。
优化,考虑把容斥贡献塞到 DP 值中,设 \(f_{i,s}\) 表示元素和为 \(s\) 时,所有方案的 $ (-1)^{|T|-k}\binom {|T|-1}{k-1}$ 和。不选是容易的,如果选,这里转移很难。
考虑原来的集合 \(T\) 加入一个元素,贡献变为:
我们没有记录 \(|T|\) 很难处理。考虑拆组合数:
前后的式子只有 \(k\) 的区别,所以我们多记一维 \(k\)。设 \(f_{i,s,k}\)。
转移有:
- \(f_{i,s,k}\gets f_{i-1,s,k}\)。
- \(f_{i,s+p_i,k}\gets f_{i-1,s,k-1}-f_{i-1,s,k}\)。
复杂度 \(O(nm(n-k))\)。
abc261_g G - Replace
考虑两个串匹配的 DP:设 \(dp_{i,j}\) 表示 \(S\) 串的前 \(i\) 个已经匹配了 \(T\) 串的前 \(j\) 个。
转移需要求 \(f_{l,r,c}\) 表示把 \(T\) 串区间 \([l,r]\) 变成字符 \(c\) 的最小代价。
若 \(|A_i|=1\) 则可以 \(f_{l,r,c}\gets f_{l,r,A_{i}[1]}+1\),这可以求最短路。
现在考虑 \(c\) 字符由一个串转移过来,设 \(g_{l,r,k,len}\) 表示 \([l,r]\) 转化为了 \(A_k[1\dots len]\) 的最小代价,转移为
容易以区间长度为顺序转移,每次还要对 \(f_{l,r,*}\) 求最短路。复杂度 \(O(n^5)\)。

浙公网安备 33010602011771号