描述 玩具工厂里有很多工人(工人总数是偶数)正在车间工作,第i名工人需要制造ai个零件(可能有多名工人制造的零件数相同)。老板决定将每2名工人组成一组,每组工人生成零件所需要的时间值恰好等于他们两人生产的零件个数总和。那么应该如何将这些工人配对,才能使的完成所有零件的生产所需要的时间最短?请输出这个最短时间。 注意:所有组工人都是同时开工。 输入 输入第1行输入一个整数N,表示接下来要输入N行数据。 接下来输入N行,每行两个整数p和q,表示有p名工人各自需要制造q个零件。 输入保证N行的p加起来肯定是偶数。 输出 输出一个整数表示答案。 输入样例 1 3 1 8 2 5 3 9 输出样例 1 17 输入样例 2 5 2 16 3 26 8 15 9 4 6 26 输出样例 2 31 提示 1≤N≤100,000; c++代码,不要解释
时间: 2024-04-12 09:31:12 浏览: 200
```cpp
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main() {
int N;
cin >> N;
vector<pair<int, int>> workers(N);
for (int i = 0; i < N; i++) {
cin >> workers[i].first >> workers[i].second;
}
sort(workers.begin(), workers.end(), [](const pair<int, int>& a, const pair<int, int>& b) {
return a.second < b.second;
});
int total_time = 0;
for (int i = 0; i < N / 2; i++) {
total_time += workers[i].second * workers[N - 1 - i].first;
}
cout << total_time << endl;
return 0;
}
```
这段代码会按照每名工人制造零件的个数进行排序,然后将工人配对,使得生产时间最短。最后输出最短时间。
相关问题
玩具工厂里有很多工人(工人总数是偶数)正在车间工作,第i名工人需要制造ai个零件(可能有多名工人制造的零件数相同)。老板决定将每2名工人组成一组,每组工人生成零件所需要的时间值恰好等于他们两人生产的零件个数总和。那么应该如何将这些工人配对,才能使的完成所有零件的生产所需要的时间最短?请输出这个最短时间。 注意:所有组工人都是同时开工。
要使完成所有零件的生产所需时间最短,可以按照以下步骤进行配对:
1. 将所有工人按照制造零件的数量从小到大排序。
2. 从数量最少的工人开始,依次将他们配对。每次配对选择数量最少的工人与数量最多的工人进行配对,并计算他们生产零件所需的时间。
3. 将已配对的工人从列表中移除,并将他们配对所需的时间累加到总时间中。
4. 重复步骤2和步骤3,直到所有工人都被配对完毕。
最后得到的总时间即为完成所有零件的生产所需的最短时间。
阅读全文