做题记录(Nov.)

10 月链接

11.1

CSP,炸了。

S-T1(P14361)

先让每个人选自己最大的,然后在人数最多的那个选项中,选择一些人换选项。把换选项造成的损失放在一起排序,选最小的若干个。记录一下一个人的两种损失不同时选。


S-T2(P14362)

错解(CCF 没卡),洛谷上能过:先把所有边扔到数组里排序,\(2^k\) 枚举哪些点要用,然后跑最小生成树,加上剪枝(边选够就退,答案已经不优了就退)。

正解:注意到 \(m\) 条边里只有 \(n - 1\) 条有用,放到一起。把所有特殊点的边各自放到一起。枚举 \(2^k\),对用到的特殊点和原来的边用归并的方法选择,启发式合并并查集,时间复杂度可视为 \(2^knk\)


S-T3(P14363)

11.6

CF436E *

第一次做反悔贪心。

考虑一颗星一颗星来加。有 \(4\) 种选择:

  1. \(i\):从 \(0\)\(1\)
  2. \(i\):从 \(1\)\(2\)
  3. \(i\):从 \(1\)\(0\)\(j\):从 \(0\)\(2\)
  4. \(i\):从 \(2\)\(1\)\(j\):从 \(0\)\(2\)

操作方法:用 \(5\) 个堆维护:\(a\)\(b\)\(a-b\)\(b-a\)\(-a\)

用这五个堆去看那种操作最优,然后进行相应的操作,更新堆里的数据。堆顶若有以前的过期数据,可以在用之前用 while 清掉。

11.11

CF1059E

我是猪猪,调了半天。题解

11.15

P3607

我真的能独立想到这个鬼区间 DP 吗?

\(f_{l,r,L,R}\) 表示在 \(l\sim r\) 上值域为 \(L\sim R\) 的最长不降子序列。看转移方程就懂了。

f[l][r][L][R] = max (f[l][r][L + 1][R], f[l][r][L][R - 1]);
f[l][r][L][R] = max (f[l][r][L][R], f[l + 1][r][L][R] + (a[l] == L));
f[l][r][L][R] = max (f[l][r][L][R], f[l][r - 1][L][R] + (a[r] == R));
f[l][r][L][R] = max (f[l][r][L][R], f[l + 1][r - 1][L][R] + (a[l] == R) + (a[r] == L));

最后一个是关键,表示翻转 \(a_l\)\(a_r\),每次翻两个,是满足条件的。

11.21

P7154

神仙 DP 题,题解思路很神秘。

大致做法:把所有 \(s,t\) 都放到一个数组里排序,区分一下,从小到大,相等就让 \(t\) 在后面。

状态数组 \(f_{i,j,0/1}\) 表示遍历到第 \(i\) 个数,\(1\sim i\) 中有 \(j\) 个属于 \(s\) 的数要匹配,但还没有和 \(t\) 中的数匹配的。\(0/1\) 表示前 \(i\) 个数中属于 \(s\) 的数是否都要匹配。

枚举时看属于 \(s\) 还是 \(t\)

若是 \(s\),则转移方程:

\[\begin{aligned} &f_{i,j,0}=f_{i-1,j-1,0}+f_{i-1,j,0}+f_{i-1,j,1}\\ &f_{i,j,1}=f_{i-1,j-1,1} \end{aligned}\]

注:若不全选,前面没有全选那么这个选不选没关系,否则可以前面全选这个不选。若要全选,则前面要全选,这个也要选。

否则,

\[\begin{aligned} &f_{i,j,0}=f_{i-1,j+1,0}\times(j+1)\\ &f_{i,j,1}=f_{i-1,j,1}+f_{i-1,j+1,1}\times(j+1) \end{aligned}\]

注:若前面没有全选,那么必须选择一个前面的和这个匹配,前面有 \(j+1\) 个。
若前面全选,那么随意,要匹配就和前者同理。

11.22

AT_abc433_f

水篇题解

11.25

P6088

好题。

做法一:可持久化 Trie 树。

做法二:把做法一的询问离线下来,用哈希表或 unordered_map 遍历一遍树。

12 月做题记录

posted @ 2025-11-08 18:59  wo2011  阅读(6)  评论(0)    收藏  举报
//雪花飘落效果