防止颓废,作为假期任务。
CF1327G Letters and Question Marks
Solution
发现是个 AC 自动机上 dp。E1. Cats on the Upgrade (easy version)
Solution
网上对于此题的题解并没有很好的说明。 首先,注意到这实际上就是个序列的 《括号树》,拿来做就行,$f[i]$ 为以 i 结尾的合法括号串数量,$f[i]=f[L[i]-1]+1$,然后再做一遍前缀和,相减求出以区间 $[l,r]$ 为结尾的数量,但是我们发现会算重,具体的,算重了 $[1,l-1]$ 取后缀,$[l,r]$ 取前缀所组合成的合法串数量。这里因为其 $[l,r]$ 必为合法,所以 $[l,r]$ 前后缀合法括号串数量相等,减去 $f[x-1]*(f[y]-f[x-1])$ 即可。D. Weight the Tree
Solution
特判下 $n=2$,对于其他的,发现一条边仅有 1 个能对答案有贡献,考虑反证法或感性理解下即可。 那么就是树上最大独立集问题了,模型《没有上司的舞会》 对于总权最小,发现对于没贡献的那么赋值为 1,有贡献的就是其度数了,在 dp 时考虑下子树度数,在选/不选的答案都一样时考虑下此即可。P7530 [USACO21OPEN] United Cows of Farmer John P
Solution
写出来暴力一切都很显然了,对于在 $[l,r]$ 区间仅出现 1 次的,不难发现就是 $pre_i < l, nex_i > r $ 的,前后驱位置嘛。A. 删数
Solution
考虑操作本质上就是合并 2 个相邻且相同的差分数组,那么对于一个差分值 $x$,合成到最后一定是 $x*2^k$,考虑 dp,设 $f[i]$ 表示 $[1,i]$ 最少留下几个数,考虑以 $i$ 倍增去跳,用 map 记录下即可。P6475 [NOI Online #2 入门组] 建设城市
P6525 「Wdoi-1」蓬莱玉枝
Solution
考虑容斥。
显然总共 \(\sum_{i=1}^{n}a[i]\sum_{j=0}^{i-1}(j+1)\binom{i-1}{j}\),考虑 dp 求出不合法的。发现我们并不需要去搞选择了多少个这一维,这里就是 dp 的妙妙妙的地方了。
考虑先排序,令 \(f[i][j]\) 表示选择的数最后一个是 \(a[i]\),倒数第二个是 \(a[j]\) 的总长度,\(g[i][j]\) 为方案。后者很好求,是一个求和的形式,前者我们发现每次从上一个 f 转移过来的再加上这一位,那么就是 \(f'+g'\),因为仅仅多加了 1 个数。
P6212 「SWTR-04」Lining up
Solution
发现贡献很大,没办法直接把贡献设作一维求方案,但是发现能提供贡献的只有 BG GB 两种,我们可以设这两个的数量为方案,即 \(f[i][x][y][0/1]\) 表示当前到了第 i 位,有 x 个 BG,y 个 GB,当前这一位是 B:1 还是 G:0 的方案数。
直接 dp,发现要再加个滚动数组。
但是还不够!
观察性质,发现 BG GB 的数量差最多是 1,那么让 \(f[i][x][y][0/1]\) 表示 x 个 BG,GB 数量与 x 的差值为 \([-1,1]\) 的方案数即可。