zoukankan      html  css  js  c++  java
  • USCAO Job Processing 4.2(贪心,不知道叫啥方法)

    题意:A,B两种机器数量m,n,且知道每个机器加工一件产品的用时,B机器加工的产品必须要A先加工过的,那么求s个产品,所需的A,B最加工完成的时间。

    A的时间比较好求,每次选择开始时间+加工时间最小的,然后当前开始时间增加。用priority_queue比较方便实现,同时按产品加工完先后顺序记录时间acost[s];

    B的比较巧妙,同样按A的方法得到bcost[s],然后反过来求bcost[s-i+1]+acost[i]的最大值即时最快完成B的时间。这个好好理解下。

    /*
    
    ID: hubiao cave
    
    PROG: job
    
    LANG: C++
    
    */
    
    
    
    
    #include<iostream>
    
    #include<fstream>
    #include<algorithm>
    #include<string>
    #include<queue>
    #include<functional>
    using namespace std;
    
    
    
    int main()
    
    {
    
    
        ifstream fin("job.in");
    
        ofstream fout("job.out");
        int n,a,b;
        int at,bt;
        int acost[1002]={0};
        int bcost[1002]={0};
        priority_queue<pair<int,int>,vector<pair<int,int> >,greater<pair<int,int> > >pq;
        priority_queue<pair<int,int>,vector<pair<int,int> >,greater<pair<int,int> > >bpq;
        fin>>n>>a>>b;
    
        for(int i=0;i<a;i++)
        {
            int m;
            fin>>m;
            pq.push(make_pair(m,m));
        }
        for(int i=0;i<b;i++)
        {
            int m;
            fin>>m;
            pq.push(make_pair(m,m));
        }
    
        for(int i=1;i<n;i++)
        {
            pair<int,int> mini=pq.top();
            acost[i]=mini.first;
            mini.first+=mini.second;
            pq.pop();
            pq.push(mini);
        }
        
        at=pq.top().first;
        acost[n]=at;
    
    
        for(int i=1;i<n;i++)
        {
            pair<int,int> mini=bpq.top();
            bcost[i]=mini.first;
            mini.first+=mini.second;
            bpq.pop();
            bpq.push(mini);
        }
        bcost[n]=bpq.top().first;
        bt=0;
        for(int i=1;i<=n;i++)
        {
            if(acost[i]+bcost[n-i+1]>bt)
                bt=acost[i]+bcost[n-i+1];
        }
        fout<<at<<" "<<bt<<endl;
        return 0;
    
    
    }
  • 相关阅读:
    剑指47 礼物的最大价值
    剑指46 把数字转化成字符串
    剑指41:数据流中的中位数
    剑指39 数组中出现次数超过半数的数
    centos 7关闭与启用防火墙,开放端口,常用命令介绍
    用docker swarm搭建docker集群
    centos 7离线安装docker, 离线安装docker-compose
    centos 7离线安装harbor
    mysql-8安装教程(windows 64位)
    centos 7离线安装中文版GitLab
  • 原文地址:https://www.cnblogs.com/cavehubiao/p/3473882.html
Copyright © 2011-2022 走看看