Card Game

这道题目肯定是想办法尽量全部都取正数

我们考虑a1a2

如果a2为负,那么我们可以把第二张牌之后的所有正数全部拿下:从第三张牌一直拿,直到第三章牌为负数,此时删除第二张牌,于是就可以重复了。所以这个时候如果a1为正就取,为负就不取,无论怎样都拿走了所有正数

如果a2为正且a1为正,我们仍然从第三张牌一直拿,直到第三章牌为负数,此时拿走第一张牌,就转变为了上面的情况

如果a2为正且a1为负,那么如果我们想要取所有正数的话,我们必须要将a2放在奇数位,然而在这种情况下,我们只有取走a1才能将a2放在奇数位。也就是说我们有两种选择,要么a1a2都取走,要么都不取;如果我们不取走所有正数的话,我们就放弃a2,剩下的正数全部都可以拿(如果不放弃a2而放弃其他的正数,由上面的分析无论如何都要拿a1,而拿了a1就可以拿走所有的正数了,所以不会不放弃a2

update 2024.8.3

想到一种新的做法。不难发现拿走一张牌不会影响这张牌上面的排的顺序,于是我们尽量考虑从后面拿

我们将数列分块,连续的正/负数为一块

那么如果一个正数块的块头处于奇数位,这个块的所有正数显然都可以拿走;如果一个正数块的块头处于偶数位但是这个正数块前面还有正数块的块头处于奇数位,那么这个正数块的所有正数也可以拿走(只需在前面的那个正数块拿走块头,这个正数块的块头就变成奇数位了)

于是我们考虑从后往前拿,这样最后剩下的正数块肯定是所有正数块的块头都位于偶数;此时我们要想拿掉一个正数块的话,就必须要拿掉一个负数,然后按之前的方法就可以拿走这个负数后面的所有正数,枚举并更新就好了

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