官方题解写的是真菜。。。
但还是解释一下,将人按照\(m\)降序排序之后,我们再固定一个点\(i\),只考虑抢的人来自前\(i\)个,那么前\(i\)个人中剩下的\(i-k\)个人中,一定是都被帮助的,否则如果存在一个啥都没做的人,我们可以选择在当前已经抢了的人当中少选一个人抢,然后去抢这个啥都没做的人,不会遗漏最优的答案空间
然后按照\(m+p\)排序的原因如下:我们主要是考虑如何将前面\(i\)个人分成两个交集为空的集合,其中一个集合\(A\)全抢,另一个集合\(B\)全帮,那么剩下的钱就是\(\sum_{i∈A} m_i-\sum_{i∈B} p_i\),显然要这个值越大越好,我们加上抢的人的\(p\),再在最终的结果减去,即\(\sum_{i∈A} (m_i+p_i)-\sum_{i∈B} p_i-\sum_{i∈A} p_i\),化简就是\(\sum_{j∈A} (m_j+p_j)-\sum_{j=1}^{i}p_j\),当\(i\)的时候后面一个是常量,所以最大化前面一个就好了
代码的细节比较多,可以看一下
但是下面这个思路其实更自然
标签:Neo,sum,集合,排序,Robin,Hood From: https://www.cnblogs.com/dingxingdi/p/18105456