1962.Remove Stones to Minimize the Total
===
###### tags: `Medium`,`Array`,`Heap`
[1962. Remove Stones to Minimize the Total](https://leetcode.com/problems/remove-stones-to-minimize-the-total/)
### 題目描述
You are given a **0-indexed** integer array `piles`, where `piles[i]` represents the number of stones in the i^th^ pile, and an integer `k`. You should apply the following operation **exactly** `k` times:
* Choose any `piles[i]` and **remove** `floor(piles[i] / 2)` stones from it.
**Notice** that you can apply the operation on the **same** pile more than once.
Return *the **minimum** possible total number of stones remaining after applying the* `k` *operations*.
`floor(x)` is the **greatest** integer that is **smaller** than or **equal** to `x` (i.e., rounds x down).
### 範例
**Example 1:**
```
Input: piles = [5,4,9], k = 2
Output: 12
Explanation: Steps of a possible scenario are:
- Apply the operation on pile 2. The resulting piles are [5,4,5].
- Apply the operation on pile 0. The resulting piles are [3,4,5].
The total number of stones in [3,4,5] is 12.
```
**Example 2:**
```
Input: piles = [4,3,6,7], k = 3
Output: 12
Explanation: Steps of a possible scenario are:
- Apply the operation on pile 2. The resulting piles are [4,3,3,7].
- Apply the operation on pile 3. The resulting piles are [4,3,3,4].
- Apply the operation on pile 0. The resulting piles are [2,3,3,4].
The total number of stones in [2,3,3,4] is 12.
```
**Constraints**:
* 1 <= `piles.length` <= 10^5^
* 1 <= `piles[i]` <= 10^4^
* 1 <= `k` <= 10^5^
### 解答
#### Python
```python=
class Solution:
def minStoneSum(self, piles: List[int], k: int) -> int:
heap = [-pile for pile in piles]
heapq.heapify(heap)
while k:
p = heapq.heappop(heap)
heapq.heappush(heap, p // 2)
k -= 1
return -sum(heap)
```
> [name=Kobe][time=Wed, Dec 28, 2022]
### Reference
[回到題目列表](https://hackmd.io/@Marsgoat/leetcode_every_day)