luogu / pjudge
题意:\(n\) 个点,权值 \(x,y,c\),选 \(m\) 个,\(S\) 为选出的集合。最大化 \(\max p_x-\min p_x+\max p_y-\min p_y+\sum p_c(p\in S)\)
\(n,m\le 2e5\)
这是蓝。这是蓝。这是蓝。如此水平,令人汗颜!
有一个重要的性质:
当 \(m\gt 4\) 时,按 c 排序后前 \(m-4\) 大的一定会选。
证明:反证,题目相当于选 4 个点加上 \(x,-x,y,-y\) 的贡献。那当 \(m\gt 4\) 时一定有没有贡献进去的点,将其调整为 c 更大的点显然更优。
然后似乎就做完了?问题转化为了 \(m \le 4\)。
直接 dp,\(f_{i, j, k}\) 表示前 \(i\) 个,选了 \(j\) 个,贡献集合状态为 \(k\) 的最大值。
其中 \(k\le 16\),代表的是目前选的里面是否有贡献给那 4 个 max 和 min。
目标:\(f_{n,m,16}\)