Neo-Robin Hood

官方题解写的是真菜。。。

但还是解释一下,将人按照m降序排序之后,我们再固定一个点i,只考虑抢的人来自前i个,那么前i个人中剩下的ik个人中,一定是都被帮助的,否则如果存在一个啥都没做的人,我们可以选择在当前已经抢了的人当中少选一个人抢,然后去抢这个啥都没做的人,不会遗漏最优的答案空间

然后按照m+p排序的原因如下:我们主要是考虑如何将前面i个人分成两个交集为空的集合,其中一个集合A全抢,另一个集合B全帮,那么剩下的钱就是iAmiiBpi,显然要这个值越大越好,我们加上抢的人的p,再在最终的结果减去,即iA(mi+pi)iBpiiApi,化简就是jA(mj+pj)j=1ipj,当i的时候后面一个是常量,所以最大化前面一个就好了

代码的细节比较多,可以看一下

但是下面这个思路其实更自然,也就是按照贪心的思路去搞

update 2024.7.13

重新做这道题目的时候做出来了,上面图片说的用优先队列维护可以想一下怎么维护,具体见CF提交代码

心路历程:像这种一个物品有买和卖的选项,就可以像下面这么想。我们不妨假设先把物品全买了,这个时候就负债了,再考虑卖掉一些物品,此时不仅不用支付这些物品买入的价格,还会得到这些物品卖出的价格,于是总增量为买入价格加上卖出价格,也就是m+p,所以按照m+p排序

当然这只是帮忙找出如何排序的,想的时候就不要禁锢在一定要先全部买入再卖出,这道题目这么做就做不出来,于是就像图片那样子想就好了

update 2025.1.7

这个贪心证明思路就叫微扰

posted @   最爱丁珰  阅读(2)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
点击右上角即可分享
微信分享提示