【BZOJ2288】生日禮物 [貪心]
阿新 • • 發佈:2017-07-28
zoj data amp ont 神奇 rip des 分享 超過
Submit: 694 Solved: 218
[Submit][Status][Discuss]
2 -3 2 -1 2
為止。
生日禮物
Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 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 22 -3 2 -1 2
Sample Output
5HINT
1 ≤ N ≤ 105, 0 ≤ M ≤ 105, 0 ≤ |Ai| ≤ 104
Solution
首先,我們可以把權值正負相同的連續的一段合並起來。Ans+=(所有正數),塊數++。
然後把每一段的絕對值加入到小根堆裏面。每次貪心取出最小的來,塊數減去 1 直到滿足題目要求
為什麽這樣可以對呢?我們來討論一下:
1. 如果刪去的段是正數, 那麽相當於不取這個。
2. 如果刪去的段是負數,那麽相當於取了這個段合並它左右的兩個段。
但是!這樣會有一個問題!就是無法考慮連續取5個段及以上的情況。
所以判斷一下,每次取負數段的時候,刪去左右兩個小段,加上一個大段(他們三個合並的值)即可。
【BZOJ2288】生日禮物 [貪心]