Loading

2026 暑假题集

qoj8049 Equal Sums

https://qoj.ac/problem/8049

【改变顺序缩小值域】

考虑将 \(x,y\) 分开,分别做两个背包,最后求答案,但是求答案的时间复杂度是 \(O(n^4)\) 的,不可过。

我们发现时间复杂度的瓶颈是算答案的时候枚举背包容量,背包容量是 \(O(n^2)\) 的,\(i,j\)\(O(n^2)\) 都无法优化,考虑压缩背包容量。

考虑将 \(x,y\) 一起处理,设 \(f_{i,j,k}\) 表示选到 \(x_i,y_j\)\(x\) 的和减 \(y\) 的和为 \(k\) 的方案数,我们将 \(k<0\) 的转移到 \(k+x_i\),将 \(k\ge 0\) 的转移到 \(k-y_i\),这样就能实现一一不漏,而且背包容量被压缩到 \(O(n)\),用前缀和优化就行了。

AT_agc041_d [AGC041D] Problem Scores

https://www.luogu.com.cn/problem/AT_agc041_d

【单调不降序列的一种构造方式】

先考虑第三个条件,令 \(k=\lceil\frac n2\rceil\),需要满足前 \(k\) 个数的和大于后 \(k-1\) 个数的和。

这里有一个 trick,考虑单调不降序列的一种构造方式,初始所有 \(a_i=n\),每次选择一个前缀 \(-1\)。为了不出现负数,需要保证操作次数小于 \(n\)

所以我们可以给每个前缀设一个权值 \(w_i\) 表示选择前缀 \(i\) 进行 \(-1\) 操作,前 \(k\) 个数的和减后 \(k-1\) 个数的和会变化多少。注意到 \(a\) 中有负数肯定不满足条件,所以直接背包 dp 就行了。

洛谷 - P9047 [PA 2021] Poborcy podatkowi

https://www.luogu.com.cn/problem/P9047

【等概率随机 \(\{-1,1\}\) 的序列的前缀和 \(\max\)\(O(\sqrt n)\) 的】

首先设 \(f_{i,0/1/2/3}\) 表示从 \(i\) 开始往下的链的长度为 \(0/1/2/3\) 的最大权值。

转移是 \(f_{i,0}+f_{j,2}\)\(f_{i,1}+f_{j,1}\),或者 \(f_{i,3}\) 单独贡献,但是这里 \(f_{i,0}+f_{j,2}\)\(f_{i,1}+f_{j,1}\) 要枚举 \(i,j\) 导致复杂度变成 \(O(n^2)\),所以考虑把其加入状态中,我们只关心 \(0,2\) 选的个数之差和 \(1\) 的奇偶性。

设计状态 \(g_{i,d,0/1}\) 表示选到第 \(i\) 个儿子,\(c(0)-c(2)=d\)\(c(1)\bmod 2=0/1\) 的最大权值,直接转移值域 \(d\) 会很大,复杂度仍然是 \(O(n^2)\) 的。

但是注意到随机打乱儿子顺序,将 \(0\) 看成 \(1\),将 \(2\) 看成 \(-1\),那么最大前缀和是 \(O(\sqrt n)\) 的,所以值域就缩小到 \(O(\sqrt n)\) 了,时间复杂度也就变成了 \(O(n\sqrt n)\) 的了。

posted @ 2026-07-31 15:23  liruixiong0101  阅读(2)  评论(0)    收藏  举报