加工生产调度
题目描述
某工厂收到了 n 个产品的订单,这 n 个产品分别在 A,B 两个车间加工,并且必须先在 A 车间加工后才可以到 B 车间加工。某个产品 i 在 A,B 两车间加工的时间分别为A,B。怎样安排这 n 个产品的加工顺序,才能使总的加工时间最短。这里所说的加工时间是指:从开始加工第一个产品到最后所有的产品都已在A,B 两车间加工完毕的时间。
输入描述
多组输入,每组数据的第一行仅一个正整数 n(0<n<1000),表示产品的数量。接下来 n 个数据是表示这 n 个产品在 A 车间加工各自所要的时间 (都是整数)。最后的 n 个数据是表示这 n 个产品在 B 车间加工各自所要的时间 (都是整数)。
输出描述
对于每组输入一个数据,表示最少的加工时间
样例输入
5
3 5 8 7 10
6 2 1 4 9
样例输出
34
思考
贪心
结论:A机器上加工时间短的任务应优先,而在B机器上加工时间短的任务应该排在后
参考博客:
https://blog.csdn.net/weixin_46657636/article/details/114225926
代码
点击查看代码
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
typedef struct Task
{
    int Ma;
    int Mb;
} Task;
bool compare1(const Task &a, const Task &b)
{
    return a.Ma > b.Ma;
}
bool compare2(const Task &a, const Task &b)
{
    return a.Mb > b.Mb;
}
int leastTime(vector<Task> &a, vector<Task> &b);
int main()
{
    int n;
    while (cin >> n)
    {
        Task task[n + 1];
        for (int i = 1; i <= n; i++)
            cin >> task[i].Ma;
        for (int i = 1; i <= n; i++)
            cin >> task[i].Mb;
        // task[i].Ma <= task[i].Mb
        vector<Task> group1;
        // task[i].Ma > task[i].Mb
        vector<Task> group2;
        for (int i = 1; i <= n; i++)
        {
            if (task[i].Ma <= task[i].Mb)
                group1.push_back(task[i]);
            else
                group2.push_back(task[i]);
        }
        sort(group1.begin(), group1.end(), compare1);
        sort(group2.begin(), group2.end(), compare2);
        // for (vector<Task>::iterator it = group1.begin(); it < group1.end(); it++)
        // {
        //     cout << (*it).Ma << "," << (*it).Mb << endl;
        // }
        cout << leastTime(group1, group2) << endl;
    }
    return 0;
}
int leastTime(vector<Task> &a, vector<Task> &b)
{
    int fa, fb;
    fa = fb = 0;
    for (vector<Task>::iterator it = a.begin(); it < a.end(); it++)
    {
        fa += (*it).Ma;
        fb = max(fa, fb) + (*it).Mb;
    }
    for (vector<Task>::iterator it = b.begin(); it < b.end(); it++)
    {
        fa += (*it).Ma;
        fb = max(fa, fb) + (*it).Mb;
    }
    return fb;
}

                
            
        
浙公网安备 33010602011771号