\(\color{red}{A}\)
若删除长度为 x 的子串后序列中没有相同元素,那么一定有至少一个长度为 x+1
的子串,删除它后序列中也没有相同元素,然后可以离散+二分
木得代码
\(\color{blue}{B}\)
打几个表忽然发现: 哎?怎么还有个循环节啊23333
代码 : 木得
\(\color{yellow}{C}\)
先把所有物品按照拿走的时间从小到大排序,拿走的时间相同就按照放上去的时
间从大到小。那么一件物品上方的物品就一定会在它的前面。
考虑 dp,设 f[i][j]表示 i 以及 i 上面物品在所有时刻中最大重量为 j 时的最
大收益。
转移的时候,我们需要枚举所有 i 上面的物品,维护一个 g[i]表示时刻 i 之前
物品的最大收益是多少。然后直接转移就好了。
代码 : 木得
\(\color{orange}{D}\)
这道题简化一下题意的话就是
给你n个长度为m的二进制串,让你选k个出来,使得这k个二进制异或起来全为1
这个时候,我们想,如果这个串串一共只有\(2^n\)个子集,然后我们只要用这个\(2^n\)减去不符合条件的就好了!然后我们就可以容斥一下
\(ans = \sum2^cnt{cnt是k的子集个数,k\inS}\)
然后难点就变成了求cnt
这时候我们想到了fmt , 用来求高维矩阵和
如图 : x轴上方有几个*就代表有几个子集