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;
    
    
    }
  • 相关阅读:
    KMP
    KMP 算法详解
    快慢指针-链表环入口问题
    算法题——只出现一次的数字
    DECODE 与CASE WHEN 的比较
    Mybatis动态传入tableName--非预编译(STATEMENT)
    mysql数据库出现无法登录(ERROR 1045 ),预防和解决及系列问题解决方法。
    15.linux iptables防火墙规则vsftp服务
    14.LAMP服务 Linux Apache Mysql Php和防护机制 xinetd、tcp wapper
    13.mysql数据库
  • 原文地址:https://www.cnblogs.com/cavehubiao/p/3473882.html
Copyright © 2011-2022 走看看