『DP』做题记录2

集训水 \(dp\) 好题。

\(\text{2022.8.4} \ \text{gdfz} \ \text{contest} \ \text{A}\)

题意:给定一个正整数 \(n\) ,求正整数序列 \(a\) 的最大可能长度 \(L\) ,其中对于任意 \(1 \leq i < j \leq L\) 有:

\(a_i \leq a_j\)

\(\text{lcm} (a_i,a_j) | n\)

\(a_i \text{lcm}(a_i,a_j)+a_j \gcd(a_i,a_j) > 2a_ia_j\)

其中 \(n \leq 10^{12}\)

首先看到第三个式子极丑无比,先简化:

\(\dfrac{a_i^2a_j}{\gcd(a_i,a_j)}+a_j \gcd(a_i,a_j) > 2a_ia_j\)

\(a_i^2a_j+a_j \gcd^2(a_i,a_j) > 2a_ia_j\gcd(a_i,a_j)\)

\(a_i^2+\gcd^2(a_i,a_j) > 2a_i\gcd(a_i,a_j)\)

\((a_i-\gcd(a_i,a_j))^2 > 0\)

\(a_i \not=\gcd(a_i,a_j)\)

\(a_i \nmid a_j\)

接下来只需要求解最长的不存在整除序列即可,第二个式子可看成 \(a_i | n ,a_j | n\) 即序列都为 \(n\) 的因子。

我们考虑贪心,对于取的所有 \(a_i\) ,其质因子幂次和必定相同,否则对于存在一个高幂次和的数,其可转化成多个低幂次的数,这样必定不优,同幂次数必定不会有倍数关系。

考虑 \(dp\) 求解,将 \(n\) 因式分解,对于 \(n\) 本质不同质因子之多存在 \(13\) 个,所以设计 \(f_{i,j}\) 表示前 \(i\) 个本质不同质因子总共选取幂次和为 \(j\) 的方案数。

那么答案一定是 \(\max(f_{k,j})\) ,其中 \(k\)\(n\) 的质因子个数。

复杂度 \(O(13 \log n + \sqrt{n})\)

CF930C

有一个显然的性质是,如果询问者得知的元素不是一个峰,那这说明必定不存在一个属于大区间的整数被所有的小区间包含。

那么我们考虑求解每个位置前面的 \(LIS\) 和 后面的 \(LIS\) 即可。

复杂度 \(O(n log n)\)

CF156C

首先为了表达方便,我们将 \([a,z]\) 映射到 \([1,26]\) 上去。

其实题目就是求 \(\sum_{i=1}^{len} x_i=s\) 这个不定方程解的个数。

然后考虑 \(dp\) ,设计如下状态 \(f_{i,j}\) 表示前 \(i\) 个数,和为 \(j\)

转移比较容易,就不放了。

复杂度 \(O(26n^2+qn)\)

CF1106E

考虑没有干扰,很显然的一个事实是 \(Bob\) 在任意时刻取的红包是固定的,那么可以通过优先队列预处理出每个时刻 \(Bob\) 取的红包。

对于存在干扰,发现 \(m\) 很小,直接 \(dp\) ,设 \(f_{i,j}\) 表示第 \(i\) 时刻,干扰了 \(j\) 次的最小价钱。

显然得转移是:

干扰: \(f_{i+1,j+1}=min(f_{i+1,j+1},f_{i,j})\)

没干扰,但是当时没红包可拿: \(f_{i+1,j}=min(f_{i+1,j},f_{i,j})\)

没干扰,且当时有红包可拿: \(f_{d_i+1,j}=min(f_{d_i+1,j},f_{i,j}+w_i)\)

答案不一定全都干扰,干扰多少次要枚一发。

复杂度 \(O(n \log n+nm)\)

CF900D

首先发现 \(y \% x \not=0\) 时必定无解。

否则我们相当于求 \(\gcd_{i=1}^{n} a_i=1\)\(\sum_{i=1}^{n}a_i=\dfrac{y}{x}\) 的方案数。

我们考虑设 \(f_x\) 表示 和为 \(x\)\(\gcd\)\(1\) 的方案数, \(g_x\) 表示和为 \(x\) 的方案数。

对于 \(g_x\) ,显然可以考虑插板 \(g_x=\sum_{i=1}^{x} C_{x-1}^{i-1}=2^{x-1}\)

我们同样可以写出 \(g_{x}=\sum_{d|x} f_d\) ,莫反一下得 \(f_x=\sum_{d|x} \mu(\dfrac{x}{d})g(d)\)

考虑 \(n\) 的唯一因式分解,对于一个质因子 \(p\) 只用考虑选或不选即可,而本质不同质因子必定不超过 \(10\) 个。

复杂度 \(O(\sqrt{n}+2^{10} \log n)\) ,其中 \(\log\) 是算 \(g\) 的复杂度。

CF883I

首先升序排列,那么贪心得取,必定是取连续的段。

我们考虑二分答案,对于答案 \(u\) ,我们考虑如何 \(check\)

考虑先设计一个 \(O(n^2)\)\(dp\) ,设 \(f_{i}\) 表示第 \(i\) 位置能否与前面的组分在一起。

有状态转移: \(f_i |=f_j (1\leq j \leq i-m \text{and} a_i-a_j \leq u)\)

但是可发现,对于 \(f\) 的转移,其决策点必定单调递增。

于是考虑像滑动窗口一样开个单调队列即可。

复杂度 \(O(n \log n)\)

CF14E

这题是个裸的 \(dp\) ,考虑设计 \(f_{i,j,k,p,0/1}\) 表示 考虑第 \(i\) 个,有 \(j\) 个凸峰, \(k\) 个凹峰,当前填 \(p\)\(0:a_{i-1}<a_i\)\(1:a_{i-1}>a_i\)

转移式手推即可。

复杂度 \(O(4^2nt^2)\)

CF16E

可以发现 \(n\) 极小,考虑状压,设计 \(f_s\) 表示当前剩余 \(S\) 集鱼的概率,转移暴力判一判即可。

复杂度 \(O(n^2 2^n)\)

\(\text{2022.8.5} \ \text{gdfz} \ \text{contest} \ \text{A}\)

给定 \(n\) 个正整数 \(a_1,a_2,\dots ,a_n\),求有多少种选择其中奇数个数的方案,使得这些数的平均数小于中位数。

\(n \leq 70, a_i \leq 800\)

花了 \(2 \text{min}\) 想出了 \(O(n^4\omega)\) 的做法,然后就想到 \(O(n^3\omega)\) ,却被卡空间了 /kk。

然后经过 \(2 h\) 的时间终于卡过去了)/qq 。

设计状态 \(f_{i,j,k} ,g_{i,j,k}\)\(f_{i,j,,k}\) 表示 \(1\) 到第 \(i\) 个数,选择 \(j\) 个数和为 \(k\) 的方案数, \(g_{i,j,,k}\) 表示 \(n\) 到第 \(i\) 个数,选择 \(j\) 个数和为 \(k\) 的方案数。

对于答案统计,只需要算出 \(g\) 的前缀和,枚举中位数,枚举左右各取 \(j\) 个数,左边取和为 \(k\) 时统计即可。

复杂度 \(O(n^3 \omega)\)

CF1613D

\(dp\) 裸题,挖掘性质,首先可以发现选为 \(x_i\) 时,前面必定不能出现 \(>x_i+1\) 的元素,考虑这玩意咋证。

\(S_i\) 表示前 \(i\) 个位置选的数集合。

\(x_j >x_i+1\) ,则 \(\text{mex}_{k \in S_j} (x_k)=x_j+1\)\(\text{mex}_{k \in S_j} (x_k)=x_j-1\)

发现 \(\min x_j=x_i+2\) ,如果 \(\text{mex}_{k \in S_j} (x_k)=x_j-1\) 发现 \(\text{mex}_{k \in S_i}(x_k) \geq x_i+2\)

如果 \(\text{mex}_{k \in S_j} (x_k)=x_j+1\) 发现 \(\text{mex}_{k \in S_i}(x_k) \geq x_i+3\)

则显然不符合题目要求。

\(f_{i,0/1}\) 表示当前 \(\text{mex} = i\) ,前面有没有 \(i+1\)

转移很好写。

复杂度 \(O(n)\)

CF768D

\(dp\) 裸题, 有个相当经典的 \(trick\) 是选完全部的期望步数是 \(\sum_{i=1}^{n} \dfrac{n}{n-i+1}\) ,这玩意是个调和系数 \(O(n \ln n)\)

设计状态 \(f_{i,j}\) 表示过了 \(i\) 天,选出本质不同物品 \(j\) 个,转移显然有。

\(f_{i,j}=f_{i-1,j-1} \times \dfrac{n-i+1}{n}+f_{i-1,j} \times \dfrac{i}{n}\)

对于天数,显然开到 \(O(n \ln n)\) 级别即可。

复杂度 \(O(n^2 \log n)\)

cf568b

由对称性和传递性,可得当 \(f(a,b)=f(b,a)=1\) ,有 \(f(a,a)=f(b,b)=1\)

可转化问题:钦定一些数不能选,其他数划分成多个集合的方案数。

设计 \(dp\)\(f_{i,j}\) 表示 \(i\) 个数分成 \(j\) 个集合的方案数 , \(g_i\) 表示 \(i\) 个数分成多个集合的方案数。

转移写起来很简单: \(f_{i,j}=f_{i-1,j-1}+j \times f_{i-1,j}\)\(g_i=\sum f_{i,j}\)

答案即为 \(\sum_{i=0}^{n-1} C_{n}^{i} \times g_i\)

复杂度 \(O(n^2)\)

posted @ 2022-08-04 13:38  Detect-Perplexity  阅读(10)  评论(0编辑  收藏  举报