BZOJ2288生日礼物 [贪心]

Posted BearChild

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了BZOJ2288生日礼物 [贪心]相关的知识,希望对你有一定的参考价值。

生日礼物

Time Limit: 10 Sec  Memory Limit: 128 MB
Submit: 694  Solved: 218
[Submit][Status][Discuss]

Description

  ftiasch 18岁生日的时候,lqp18_31给她看了一个神奇的序列 A1, A2, ..., AN. 她被允许选择不超过 M 个连续的部分作为自己的生日礼物。

  自然地,ftiasch想要知道选择元素之和的最大值。你能帮助她吗?

技术分享

Input

  第1行,两个整数 N  和 M , 序列的长度和可以选择的部分。

  第2行, N 个整数 A1, A2, ..., AN , 序列。

Output

  一个整数,最大的和。

Sample Input

  5 2
  2 -3 2 -1 2

Sample Output

  5

HINT

  1 ≤ N ≤ 105, 0 ≤ M ≤ 105, 0 ≤ |Ai| ≤ 104

Solution

  首先,我们可以把权值正负相同的连续的一段合并起来。Ans+=(所有正数),块数++。

  然后把每一段的绝对值加入到小根堆里面。每次贪心取出最小的来,块数减去 1 直到满足题目要求为止。

  为什么这样可以对呢?我们来讨论一下:

    1. 如果删去的段是正数, 那么相当于不取这个

    2. 如果删去的段是负数,那么相当于取了这个段合并它左右的两个段。

  但是!这样会有一个问题!就是无法考虑连续取5个段及以上的情况。

  所以判断一下,每次取负数段的时候,删去左右两个小段加上一个大段他们三个合并的值)即可。

 

以上是关于BZOJ2288生日礼物 [贪心]的主要内容,如果未能解决你的问题,请参考以下文章

BZOJ 2288 POJ Challenge生日礼物(贪心+优先队列)

[bzoj2288][POJ Challenge]生日礼物

bzoj 2288: POJ Challenge生日礼物链表+堆

BZOJ 1293: [SCOI2009]生日礼物 贪心

Bzoj 2288 生日礼物题解

BZOJ2288: POJ Challenge生日礼物