• 【BZOJ5088】【HDU6000】 洗衣服Wash


    洗衣服

    题意

    你现在要洗l件衣服。你有n台洗衣机和m台烘干机。由于你的机器非常的小,因此你每次只能洗涤(烘干)一件衣服。 第i台洗衣机洗一件衣服需要w_i分钟,第j台烘干机烘干一件衣服需要w_j分钟。 请问把所有衣服洗干净并烘干,最少需要多少时间?假设衣服在机器间转移不需要时间,并且洗完的衣服可以过一会再烘干。

    Solution

    首先我们用两个优先队列分别维护洗衣机和烘干机,每次取出顶端时间最小的,设为当前答案,然后再加上自己洗或烘干所需要的时间,丢回队列里面

    这样的贪心很好理解。接下来,我们考虑怎么样才能让时间消耗最小,显然是让先洗完的用最长的烘干时间的方案嘛。

    如果认为最小时间消耗的方案并不一定可以搭配上时间最长的方案,可以康康注释

    code:

    #include<bits/stdc++.h>
    using namespace std;
    #define int long long
    #define pr pair<long long,long long>
    #define mp make_pair
    priority_queue<pr,vector<pr>,greater<pr> >q1,q2;
    bool cmp(int a,int b){
        return a>b; 
    }
    int a[100010];
    int b[100010];
    int ans1[1000010];
    int ans2[1000010];
    signed main(){
        int l,n,m;
        scanf("%lld%lld%lld",&l,&n,&m);
        for(int i=1;i<=n;++i){
            scanf("%lld",&a[i]);
            q1.push(mp(a[i],i));
        }
        for(int i=1;i<=m;++i){
            scanf("%lld",&b[i]);
            q2.push(mp(b[i],i));
        }
        for(int i=1;i<=l;++i){
            pr top=q1.top();
            q1.pop();
            ans1[i]=top.first;
            top.first+=a[top.second];
            q1.push(top);
        }
        for(int i=1;i<=l;++i){
            pr top=q2.top();
            q2.pop();
            ans2[i]=top.first;
            top.first+=b[top.second];
            q2.push(top);
        }
        sort(ans1+1,ans1+1+l);
        sort(ans2+1,ans2+1+l,cmp);
        int ans=0;
        for(int i=1;i<=l;++i)ans=max(ans,ans1[i]+ans2[i]);//这里ans1+ans2并不一定要洗完衣服立刻放入烘干机,因为对于一个烘干机,烘干顺序是无所谓的,所以这个ans2可以理解为我洗完后我选择的这个烘干机要再工作多久才能烘干完自己的所有衣服,然后取max就是答案了
        printf("%lld
    ",ans);
    }
    
  • 相关阅读:
    欧几里德算法实现求两个正整数的最大公因子
    C#委托、泛型
    C与C++中的time相关函数(转载)
    【转】温州的南拳
    前端面试题
    vuecli卸载旧版,再重新安装后还显示的是旧的版本
    不定宽高的div水平、垂直居中问题
    解决JS中取URL地址中的参数中文乱码
    移动vue项目,启动错误:Module build failed: Error: No PostCSS Config found in:
    codeblocks colour theme
  • 原文地址:https://www.cnblogs.com/youddjxd/p/11782637.html
Copyright © 2020-2023  润新知