牛牛晾衣服

C 牛牛晾衣服

牛牛有n件带水的衣服,干燥衣服有两种方式。
一、是用烘干机,可以每分钟烤干衣服的k滴水。
二、是自然烘干,每分钟衣服会自然烘干1滴水。
烘干机比较小,每次只能放进一件衣服。
注意,使用烘干机的时候,其他衣服仍然可以保持自然烘干状态,现在牛牛想知道最少要多少时间可以把衣服全烘干。

思路: 考虑从大往小取出衣服 进行烘干 其实存在一个问题 就是当前秒最优决策并不能代表下一秒的最优决策
所以每件衣服 只能烘干一秒 然后放回待选区 所以使用对应的优先队列 附上代码
class Solution {
public:
    /**
     * 计算最少要多少时间可以把所有的衣服全烘干
     * @param n int整型 n件衣服
     * @param a int整型vector n件衣服所含水量数组
     * @param k int整型 烘干机1分钟可以烘干的水量
     * @return int整型
     */
    int solve(int n, vector<int>& a, int k) {
        priority_queue<int>que;
        while(!que.empty()) que.pop();
        for(int i = 0; i < n; i ++){
            que.push(a[i]);
        }
        if(k == 1){
            return que.top();
        }
        int time = 0, value = 0;
        while(que.top() > value){
            int t = que.top();
            t = t - k + 1; 
            /*
            你可能会疑惑为什么要 - k + 1
            答案就是对应的 如果考虑一个 8 k=4
            那么对应的话 剩余一个4 就不进入循环 所以得 + 1
            因为加1了 所以k == 1的情况就需要特判
            */
            que.pop();
            time += 1;
            value += 1;
            que.push(t);
        }
        return time;
        // write code here
    }
};
posted @ 2020-07-17 00:05  moxin0509  阅读(199)  评论(0编辑  收藏  举报