zoukankan      html  css  js  c++  java
  • 中山纪念中学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;
    }

    保持热爱 不懈努力 不试试看怎么知道会失败呢(划掉) 世上无难事 只要肯放弃(划掉)
  • 相关阅读:
    第 1 章 Java 设计模式介绍
    Java 随心笔记1
    在Editplus中配置java编译(javac)和运行(java)的方法
    RabbitMQ/JAVA 客户端连接测试
    CentOS上的RabbitMQ安装
    AMQP与RabbitMQ简介
    Mongodb学习教程汇总
    selenium+python之iframe学习笔记
    selenium 上传文件,非input标签,安装pyuserinput
    selenium+python之元素定位的八种方法
  • 原文地址:https://www.cnblogs.com/ldudxy/p/9446505.html
Copyright © 2011-2022 走看看