• 中山纪念中学20170310洗衣服(贪心,优先队列升序【pair】)


    #include<bits/stdc++.h>
    using namespace std;
    typedef pair<long long,int>clot;
    priority_queue<clot,vector<clot>,greater<clot> >wash,dry;//升序队列
    int l,n,m;
    long long ans=0;
    long long tim[1000010],w[100010],d[100010];//tim记录衣服的经过从洗衣机到烘干机拿出的时间之和,最晚放进烘干机那批衣服里时间之和最长的即为ans
    int main()
    {
        scanf("%d%d%d",&l,&n,&m);
        for(int i=1;i<=n;i++)
        {
            scanf("%lld",&w[i]);
            wash.push(clot(w[i],i));//将洗衣机的数据放入优先队列
        }
        for(int i=1;i<=m;i++)
        {
            scanf("%lld",&d[i]);
            dry.push(clot(d[i],i));//将烘干机的数据放入优先队列
        }
        for(int i=0;i<l;i++)
        {
            clot tmp=wash.top();//取工作最快的洗衣机
            wash.pop();
            tim[i]=tmp.first;//当前已经工作完成的最快的洗衣机
            tmp.first+=w[tmp.second];//记录时间累加,这台洗衣机累计的工作时间
            wash.push(tmp);//再次放入队列让它工作
        }
        for(int i=l-1;i>=0;i--)//最晚洗完的衣服放到最快的烘干机里,否则会很慢,此处贪心
        {
            clot tmp=dry.top();//取工作最快的烘干机
            dry.pop();
            tim[i]+=tmp.first;//当前已经工作完成的最快的烘干机
            tmp.first+=d[tmp.second];//记录时间累加,这台烘干机累计的工作时间
            dry.push(tmp);//再次放入队列让它工作
            ans=max(ans,tim[i]);//取一个花费时间最长的,木桶效应,有的衣服可能洗完得早放进了工作时间长的烘干机里导致时间之和更长
        }
        printf("%lld ",ans);
        return 0;
    }

    保持热爱 不懈努力 不试试看怎么知道会失败呢(划掉) 世上无难事 只要肯放弃(划掉)
  • 相关阅读:
    第十四周学习进度总结
    第十三周学习进度总结
    第十二周学习进度总结
    第十一周学习进度总结
    第十周学习进度总结
    第九周学习进度总结
    第八周学习进度总结
    day16-机器学习十讲第一讲
    day15-验证码识别
    day14-卷积网络识别手写数字
  • 原文地址:https://www.cnblogs.com/ldudxy/p/9446505.html
Copyright © 2020-2023  润新知