『DP』做题记录1

这个是蒟蒻的dp练习记录

ARC116D

题意:\(n\) 个数和为 \(m\) 且异或和为 \(0\) 的方案数。

这东西看上去不好 \(dp\) ,我们考虑二进制拆分。

\(f_i\) 表示和为 \(i\) 的方案数。

枚举最后一位增加的位数。

\(f_i=\sum_{j=2 \& \&j|2}^{n} f_{\frac{i-j}{2} \times C_n^j}\)

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

ARC107D

题意:\(n\) 个数 可为 \(2^{-i}\) ,和为 \(m\) 的方案数。

不假思索得上 \(dp\)

\(f_{i,j}\)\(i\) 个元素,和为 \(j\) 的方案数。

当有 \(1\) 时, \(f_{i,j}=f_{i-1,j-1}\)

否则 我们全体乘上 \(2\) 的时候方案数等价,即 \(f_{i,j}=f_{i,j \times 2}\)

\(\therefore f_{i,j}=f_{i-1,j-1}+f_{i,j \times 2}\)

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

CF1342F

题意:每次操作删一个数,把权加到另一个数上,求使得序列严格单增的最少操作次数,输出操作步骤。

发现 \(n\) 很小,直接状压。

设计状态: \(f_{i,j,s}\) 表示已经决策 \(i\) 个集合,第 \(i\) 个集合选的最后留下的数为 \(j\) ,已选择 \(s\) 方案。

则有: \(f_{i,j,s} \rightarrow f_{i+1,v,k} \ \ (v >j \& \& s \subset k , v \in k-s)\)

转移需要技巧性,由已得的上个状态转移到可能的下个状态。

这样转移复杂度 \(O(n^2 3^n)\)

CF1225G

题意:给定数列 \(a\) ,有一个函数 \(f(x)=\begin{cases}f(\dfrac{x}{k})&x|k\\x& otherslse\end{cases}\) ,每次删去 \(x,y\) 加入 \(f(x+y)\) ,求最后是否能将 \(a\) 数列变为一个 \(1\) ,如果可以输出方案。

挖掘性质:首先发现如果能构造 \(\sum_{i=1}^{n} a_i k^{-b_i} = 1\) ,那就一定能构造出一种方案使得最终结果为 \(1\)

(upd:性质具体证明已经忘记了,后面的 dp 应该是简单的。)

posted @ 2022-06-05 20:09  Detect-Perplexity  阅读(18)  评论(0编辑  收藏  举报