码迷,mamicode.com
首页 > 其他好文 > 详细

【BZOJ2288】生日礼物 [贪心]

时间:2017-07-28 17:13:16      阅读:143      评论:0      收藏:0      [点我收藏+]

标签:最大值   允许   技术分享   序列   desc   负数   最小   mst   content   

生日礼物

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】生日礼物 [贪心]

标签:最大值   允许   技术分享   序列   desc   负数   最小   mst   content   

原文地址:http://www.cnblogs.com/BearChild/p/7251246.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!