b_lc_移除石子的最大得分(贪心+堆)

大小为 a​​​​​​、b 和 c​​​​​​ 的三堆石子。每回合要从两个不同的非空堆中取出一颗石子,并在得分上加 1 分。当存在两个或更多的空堆时,游戏停止。求可以得到的 最大分数。(1 <= a, b, c <= 10)

思路:要求最大得分,自然是每次从最大、次大这两堆中各取1颗,但是不必每次取一颗,可以取small-medium颗

class Solution {
public:
    int maximumScore(int a, int b, int c) {
        int ans = 0 ;
        priority_queue<int> q;
        q.push(a), q.push(b), q.push(c);
        while (true) {
            int big = q.top(); q.pop();
            int med = q.top(); q.pop();
            int sma = q.top();
            if (med == 0) break;
            int take = max(1, med - sma);
            ans += take, big -= take, med -= take;
            q.push(big), q.push(med);
        }
        return ans;
    }
};
posted @ 2021-02-15 19:51  童年の波鞋  阅读(81)  评论(0编辑  收藏  举报