为啥会背疼啊?
设 dpi,j 表示已经选了 i 根弦,第 i 根弦在二进制下又 j 位是 1 的方案数。初始化 dp0,0=0,转移就是 dpi,j=k=0∑32−jdpi−1,k×(j32−k)。最终答案就是 i=1∑nj=0∑32dpi,j。
就是没想到最终答案。
我们发现对于每个区间,左端点也不是定的,右端点也不是定的。这十分的麻烦。考虑固定一个左端点或者右端点来考虑。
设 fi 表示 [i,fi) 这段区间是合法的。显然这玩意可以 O(n) 预处理。查询的时候暴力一点:如果 fl≤r,l 就跳到 fl,ans 加 1。注意 ans 初始为 1。
看到这一就应该自然而然的想到倍增了。
建边就这样建:先离散化,i−1→i 建一条容量 k,费用 0 的边,对于每个区间,l→r 建一条容量 1,费用 r−l+1 的边,s→1 建一条边,容量 k,费用 0,n→t 建一条容量 k,费用 0 的边,跑最大流就是了。
如何理解?我们发现如果有 x 条边重合了,那么一定需要至少 x 的流量。
枚举时间,在时间和下一站之间建边。
后日谈
今天还没消掉 24∘ 空调给的 debuff。。。
日记
周五 5月 23 2025 371 字 · 2 分钟