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;
    
    
    }
  • 相关阅读:
    建筑名称解释
    delphi 文件查找
    bat如何批量删除指定部分文件夹名的文件夹
    在 DELPHI 中 procedure 型变量与 method 型变量的区别
    Spearman Rank(斯皮尔曼等级)相关系数
    机器学习的MLE和MAP:最大似然估计和最大后验估计
    error “Device supports x86, but APK only supports armeabi-v7a”
    windows 安装ninja
    Gradle语法基础解析
    executing external native build for cmake
  • 原文地址:https://www.cnblogs.com/cavehubiao/p/3473882.html
Copyright © 2011-2022 走看看