首页 > 其他分享 >luogu P8340 [AHOI2022] 山河重整

luogu P8340 [AHOI2022] 山河重整

时间:2023-05-16 16:46:15浏览次数:96  
标签:geq 半边 luogu P8340 sqrt 转移 AHOI2022 复杂度 dp

题面传送门

牛逼题。
solution
首先来推一推性质。假设我们现在有一个合法的集合,覆盖了 \([1,S]\),显然新加进去的数 \(i\) 不能 \(\geq S+2\),而如果 \(\leq S+1\) 那么 \([1,i+S]\) 显然可以被覆盖到。因此有一个 \(O(n^2)\) 的 dp:设选到了第 \(i\) 个数,总和为 \(j\) ,要求 \(j\geq i\)。

这个 dp 状态是两维的,没前途。考虑容斥,枚举第一个不合法的位置设为 \(i\),那么 \([1,i-1]\) 应该完全覆盖了 \([1,i-1]\),然后 \(i+1\) 没选,之后的任意。这样子我们发现我们只需要知道 \(f_i\) 表示 \([1,i]\) 完全覆盖了 \([1,i]\) 的方案数即可。

现在状态降低了,但是转移还是 \(O(n^2)\) 的。考虑 \(f_i\) 转移乘的系数是一个整数划分的性质,不妨仿照那个东西的方法,设 \(g_{i,j}\) 表示选了 \(i\) 个,总和为 \(j\) 的方案数。因为选的数互不相同,因此 \(i\) 是 \(O(\sqrt n)\) 的。这样就可以 \(O(n\sqrt n)\) 计算出 \([1,i]\) 中选若干个数加起来为 \(i\) 的方案数。

然后考虑把容斥的 \(-f_j\) 加进去,这需要枚举选的个数 \(i\) ,然后初始值 \(i(j+1)+j\)。 但是这里有一个问题,\(f_j\) 的计算依赖于前面,但是计算 \(f_j\) 的时候需要将 \([1,j-1]\) 都加入 dp 中,时间复杂度不能承受。

考虑分治,每次只计算左半边对右半边的贡献,这样就可以一次性将左半边加入 dp 中,时间复杂度 \(T(n)=2T(n/2)+O(n\sqrt n)\) ,解得 \(T(n)=O(n\sqrt n)\)。

但是实际上这样子常数非常大。注意到如果 \(f_j\) 要转移到 \(f_{i}\),那么 \(j\) 要选一个, \(\geq j+2\) 的也要选一个,因此 \(f_j\) 向 \(f_i\) 转移要求 \(2j+2\leq i\),也就是说分治的时候右半边区间内是不会转移的,这样子时间复杂度计算就是 \(T(n)=T(n/2)+O(n\sqrt n)\) ,常数比较小。

submission

标签:geq,半边,luogu,P8340,sqrt,转移,AHOI2022,复杂度,dp
From: https://www.cnblogs.com/275307894a/p/17406079.html

相关文章

  • Luogu P5520 [yLOI2019] 青原樱
    考虑先不种花,先算出“花之间空位的可行方案数”\(tot\),乘上花的排列的贡献就能算出答案,即\(tot\timesm!\)为答案所以只需算出“花之间空位的可行方案数”能发现,设\(x_i\)为第\(i\)朵花与第\(i-1\)朵花之间空位的数量,其中设第\(0\)朵花在\(0\)的位置,则发现会有以......
  • luogu P4690 [Ynoi2016] 镜中的昆虫 题解
    P4690[Ynoi2016]镜中的昆虫题解题意维护一个长为 \(n\) 的序列 \(a_i\),有 \(m\) 次操作。将区间 \([l,r]\) 的值修改为 \(x\)。询问区间 \([l,r]\) 出现了多少种不同的数,也就是说同一个数出现多次只算一个。题解感觉这道题还是比较有意思的,像是一堆套路......
  • 【题解】Luogu[P3750] [六省联考 2017] 分手是祝愿
    Link→小清新dp题,纪念自己的700ac(一个点只有两个状态开和不开,且按两下相当于没按,我们可以从大到小有亮的就按一下,如果我们按到了不需要按的键,就需要再按一下使他变回来。设\(f_i\)表示\(i\)个正确选择变为\(i-1\)个的期望操作次数。则有\(\dfrac{i}{n}\)概率按到......
  • 【题解】Luogu[P4900] 食堂
    一到推柿子题。题意即求\(\sum\limits^{n}_{i=1}\sum\limits^{i}_{j=1}\left\{\frac{i}{j}\bmodP\right\}\)对于\(\frac{i}{j}\bmodP\)我们知道即为\(i\)乘上\(j\)的逆元,即为\(i\cdot\mathrm{inv}(j)\)故:\[\begin{aligned}\sum^{n}_{i=1}\sum^{i}_{j=1}\l......
  • 【题解】Luogu[P6003] USACO20JAN Loan Repayment S
    模拟赛第一题(9pts考虑暴力。枚举\(x\),对于每个\(x\),模拟\(k\)天,判断其是否合法,找出最大的\(x\)。时间复杂度:\(O(n^2)\)36pts考虑优化先前暴力算法。我们不难发现当\(x\)合法时,必然有合法\(x_1\),当且仅当\(x_1<x\)。故\(x\)具有单调性,考虑二分答案。对于\(x......
  • 【题解】Luogu[P8818] CSP-S 2022 策略游戏
    一道简单区间rmq分类讨论题,考场上最后5分钟想出来,没写出来,退役了……给定两个序列\(A_{1},\dots,A_{n}\);\(B_1,\dots,B_n\)规定\(C_{i,j}=A_i\timesB_i\)。题目说小L和小Q必定选择最优策略,而小L先选,小Q后选,小L要使得\(C_{i,j}\)尽可能大,小Q要使得\(C_{i,j}\)......
  • 【题解】Luogu[P1879] [USACO06NOV]Corn Fields G
    Link→状压dp典题,看数据范围就能多半猜到是状压。\(M\)行\(N\)列很不舒服,本篇题解规定为\(N\)行\(M\)列。因为说没有哪两块草地相连,我们不妨一行一行考虑,一行中每格只可能是\(0\)或\(1\),所以一行的总不同状态数是\(2^M\)。我们用二进制表示每一行的状态,对于每一行,暴......
  • 【题解】Luogu[P1967] NOIP2013 提高组 货车运输
    Link→很容易想到一个暴力做法,就是跑一遍Floyd,\(F_{i,j}\)表示\(i\)到\(j\)最大载重量,转移\(F_{i,j}=\max\{F_{i,j},\min\{F_{i,k},F_{k,j}\}\}\)。显然时间复杂度\(O(n^3)\)是过不了的。我们发现,因为是求两点路径中使得最小值最大,实际上有一些较小的路径是不会走......
  • luogu P3345 [ZJOI2015]幻想乡战略游戏
    P3345[ZJOI2015]幻想乡战略游戏这道题还是比较有意思的,做了一个比较长的时间,但是点分树实在是太毒瘤了,所以记录一下线段树的做法。题面给一棵树,有边权,每次修改一个点的点权,修改完后输出所有点到这棵树的带权重心的贡献,即\(\sumdis_i\timesval_i\)题解考虑朴素的暴......
  • Luogu P5576 [CmdOI2019]口头禅 题解
    upd:修改了一些思路的表达,帮助理解。首先膜拜yyc大佬出这样的毒瘤好题。另外感谢永无岛、xtx1092515503、hs_black提供的思路。这里整理了一下这些思路,可能会有所启发。题意:给定一个字符串构成的序列,多次查询给定区间内各字符串的最长公共子串长度。提供一种后缀数组+......