10-29 题

10-29 题

abc248_g G - GCD cost on the tree

考虑枚举 \(\gcd\) 计算方案数 \(f_i\)。直接计算 \(\gcd\) 不好做,考虑容斥计算 \(g_i\) 表示 \(\gcd\)\(i\) 的倍数时的方案数。则

\[f_i=g_i-\sum _{x>1}f_{i\times x} \]

把所有 \(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 的总数减去 312123。记 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-123
    

    x1x 即 $\sum _{j<i\land a_j<a_i} lu_j $。

  • 1234。枚举 3,前面是 123 后面是 \(ru_i\)

  • 1xxx 容易。

P4707 重返现世

考虑 min-max 容斥。第 \(k\) 大 min-max 容斥公式为(期望下也成立):

\[E(\text{kthmax}(S))=\sum _{\varnothing \ne T\subseteq S} (-1)^{|T|-k}\binom {|T|-1}{k-1}E(\min(T)) \]

我们记一个物品的权值为第一次被选的时间,那么我们要求第 \(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\) 加入一个元素,贡献变为:

\[\sum _T (-1)^{|T|-k}\binom {|T|-1}{k-1}\to \sum _{T} (-1)^{|T|+1-k}\binom{|T|} {k-1} \]

我们没有记录 \(|T|\) 很难处理。考虑拆组合数:

\[\begin{aligned} \sum _{T} (-1)^{|T|+1-k}\binom{|T|} {k-1} &=\sum _T (-1)^{|T|+1-k} \Big [\binom {|T|-1} {k-2} +\binom {|T|-1}{k-1}\Big] \\ &=\sum _T (-1)^{|T|+1-k} \binom {|T|-1} {k-2} -(-1)^{|T|-k}\binom {|T|-1}{k-1} \end {aligned} \]

前后的式子只有 \(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]\) 的最小代价,转移为

\[g_{l,r,k,len}\gets g_{l,cut,k,len-1}+f_{cut+1,r,A_k[len]} \]

\[f_{l,r,c_k}\gets g_{l,r,k,len(A_k)}+1 \]

\[g_{l,r,k,1}\gets f_{l,r,A_k[1]} \]

容易以区间长度为顺序转移,每次还要对 \(f_{l,r,*}\) 求最短路。复杂度 \(O(n^5)\)

posted @ 2025-10-31 16:34  dengchengyu  阅读(3)  评论(0)    收藏  举报