T1
考虑把 $D$ 从小到大做。看成没有性质二分图匹配肯定是做不了的,所以应该把 $W$ 从小到大排序,把二分图匹配这个比较烂的东西变得好一点。
如果一种方案中,匹配了的点是另一个方案的子集,那这个方案一定不优。观察一下性质,对于 $n=4$ 的情况,如果 $i$ 和 $i-3$ 匹配了,$i-2$ 和 $i-1$ 一定能匹配且会匹配。对于 $n$ 更大的情况也可以用归纳法证明,$i$ 一定只会和 $i-1$ 和 $i-2$ 匹配,并且如果和 $i-2$ 匹配了那 $i-1$ 谁都没跟它匹配。
这样可以直接动态 DP,$f_{i}$ 表示 $i$ 匹配了的最大收益,转移的时候向量里需要记 $f_i,f_{i-1},f_{i-2}$。然后从小到大扫 $D$,显然会发生改变的是 $W_i-W_{i-1}$ 的点和 $W_i-W_{i-2}$ 的点,所以只有 $\mathcal O(n)$ 个,线段树处理转移矩阵,每次单点修改,查询的时候直接查即可,复杂度 $\mathcal O(n\log nT^3)$,其中 $T=3$。
T2
无效位指被 Candy 控制的位,有效位指没有被控制的位。
首先对于无效位,是一定不会用它传输信息的,需要把他们和有效位区分出来。
然后对于题目要求传的 $1024$ 个 bit,显然必须要通过 $64$ 次来传输,这样有用的 bit 就只剩下了 $32$ 个,需要用这 $32$ 个 bit 让 Bob 知道那些位是有效位。非常的离谱啊,还要把他们区分出来。
考虑第一次能传什么信息。猜测一下,只能传全 $0$ 或者全 $1$,这样可以通过 $01$ 个数多少关系来传一个 bit。如果第一位是被控制的就传 $0$,否则传 $1$,然后对第二位做同样的事情。这样是 $64+31$ 次。有 $30$ 分。
上面这个东西显然丢了很多信息。因为知道了有效 bit 的位置之后可以多传 bit。假设 Bob 已经知道了第 $1$ 个有效的 bit 是 $i$,考虑做如下过程:如果第 $i+1$ 位是无效位,则第 $i$ 位传 $0$,否则第 $i$ 位传 $1$,然后一个很深刻的东西是 Bob 就知道第 $i+1$ 位是有效位了,所以本次传递 $i+1$ 位上的 bit 也可以利用到。那就继续做上述过程,直到遇到了无效位。此时 Bob 可以根据已知有效位后面传的第一个 $0$ 来确定下一个无效位的位置,这样就可以做到 $64+15$。这样应该有 $60$。
注意到上述过程,一次传递只用到了之前确定的一个位,但是只要 $00\dots0011\dots 11$ 就可以把这玩意卡到上界,其中 $0$ 表示无效位,$1$ 表示有效位。所以考虑先花一次全 $01$ 的传递来确定从左还是从右开始传,这样起始无效位的个数最多就是 $8$ 个,分析一下应该是能做到更优一点点,$70$ 左右?
其实可以发现上面的过程都是对于每次传数据包分别考虑的,这个思路看起来就和正解比较遥远。其实我们传的是一个矩阵,要从 $31$ 个列里面确定出 $15$ 个列。一个很重要的观察是 $16>15$ 是必须的,否则一个 bit 都传不过去。所以考虑利用这个 $16>15$ 搞一点事情。
一个很离谱的想法是建图,每一列是一个点,根据每一列的信息确定这个点的出边。建出来一个外向基环