上一页 1 2 3 4 5 6 ··· 19 下一页
摘要: 首先不难发现,字符串具体是啥对答案没有影响。 于是有两种做法,第一种我个人认为更好理解,就是由于长度相同的字符串,用相同操作次数产生它们的方案数是一样的,则设计 f(i,j) 表示用 i 次操作产生长度为 j 的字符串的方案数,则有 加入 0/1,$f(i+1,j+1)\gets f 阅读全文
posted @ 2022-11-17 20:36 Kobe303 阅读(17) 评论(0) 推荐(0) 编辑
摘要: 设 f(S) 表示将字符串 S 拆分成 T 的前缀相连,最少需要划分成几段。 需要注意到一个性质,每个字符串被拆分时,最后一个子串应尽可能长。换句话说,若字符串 A,B 都是可以转移的位置,且 AB 的前缀,则必有 f(A)<f(B),从 A 转移一定最优 阅读全文
posted @ 2022-11-17 08:48 Kobe303 阅读(26) 评论(0) 推荐(0) 编辑
摘要: 先考虑暴力的 DP,设 fi 表示到根节点距离恰好为 i 的节点数量,则有 fi=nj=1fidj
初值为 f0=1,最终求的是 xi=0fi。 注意到 di100,有很多相同的转移,于是记 $cn 阅读全文
posted @ 2022-11-16 22:25 Kobe303 阅读(18) 评论(0) 推荐(0) 编辑
摘要: 考虑二分最小值,设当前二分出的值为 x。 那么把区间中 x 的变成 1,其余变为 0,那么就是查询区间内最长全 1 区间长度是否 k。 这个类似于区间最大子段和,可以用线段树轻松维护。 而发现每个 x 都可能被用到,于是换成主席树即可。 时间复杂度 $\m 阅读全文
posted @ 2022-11-16 21:09 Kobe303 阅读(21) 评论(0) 推荐(0) 编辑
摘要: 首先需要发现一个性质,每个串都是单调的,因为一个不单调的串一定可以拆分成若干个单调的串,并且不劣。 于是用 DP 处理出两个单调串相交的点分给哪个串即可。 具体的话就是设 fi 表示前 i 个位置的答案,如果 ai2,ai1,ai 是单调的,那么 $$f_i=f_{i 阅读全文
posted @ 2022-11-16 19:46 Kobe303 阅读(18) 评论(0) 推荐(0) 编辑
摘要: E: 简单最短路,加一维表示当前是否翻转所有边的状态即可。 Code F: 先考虑简化版本,如果 \left{A\right} 中没有 0,如何判定。 重新表述一下条件,令 mni,mxi 分别表示第 i 行中的最小值和最大值,则有 $mn_1\le mx_1\le mn_2\l 阅读全文
posted @ 2022-11-16 18:58 Kobe303 阅读(70) 评论(0) 推荐(0) 编辑
摘要: 每一个 bool 变量表示「ai 是否 j」,由于 ai 必然 1,所以总的变量数是 n(k1)。 然后我们根据题目条件来建有向边,注意 2-sat 要满足对称性,所以下文中每一个条件的逆否命题都要建边: aiai+1,等价于「对于所有的 阅读全文
posted @ 2022-11-16 07:07 Kobe303 阅读(40) 评论(0) 推荐(0) 编辑
摘要: 考虑时光倒流。 由于 A 操作只会给两个活跃的点连边,所以可以忽略,倒过来相当于没有删边操作。 然后只剩下加边,加活跃点,两种操作。每次暴力 DFS 即可。 时间复杂度 O(n+Q)。 Code: #include <bits/stdc++.h> using namespace 阅读全文
posted @ 2022-11-15 19:58 Kobe303 阅读(25) 评论(0) 推荐(0) 编辑
摘要: 设当前枚举到第 i 位,xi 前面期望连续 1 的个数。 令 ai=x,bi=x2,ci=x3a 很好转移, ai=(ai1+1)×pi
b 的转移考虑 (x+1)2=x2+2x+1,则有 $$b_i=(b_{i 阅读全文
posted @ 2022-11-14 19:12 Kobe303 阅读(28) 评论(0) 推荐(0) 编辑
摘要: 先对 k 进行二分,将最值问题转化成判定问题。 判定一个 k 是否合法时,贪心去考虑,一个节点下面的若干条链在合并时,一条链肯定和另一条使它合并后恰好满足长度限制的链合并最优。因此我们用 multiset 来进行维护,一条长度为 len 的链,去查询最小的长度 klen阅读全文
posted @ 2022-11-14 08:18 Kobe303 阅读(20) 评论(0) 推荐(0) 编辑
上一页 1 2 3 4 5 6 ··· 19 下一页
点击右上角即可分享
微信分享提示