首先,01 背包是 NP 的,直接做不行,要关注题中的小性质。
发现 $C_i\le 300$,于是对 $C_i$ 分组,同组内价值降序排序,设为 $V_1\sim V_m$,那么如果选上 $V_k$,则必然选上 $V_1\sim V_{k-1}$,挺显然的。把它看作一个前缀和的形式。
然后发现 dp 方程可以各个同余类分开计算。
进一步的,一个同余类中的 dp 转移具有决策单调性。
感性理解一下,如果决策不具有单调性,那么会取的 $k$ 会更大,而我们对元素进行了降序排序,$k$ 更大是不优的。
决策单调性分治计算即可。
时间复杂度 $\mathcal O(kc\log k)$。