描述 有N件货物,每个货物重量Wi,价值Vi,现在有K辆车,每辆车可以装载最大重量是Ci。由于这些货物不能混杂,每辆车只能装载一件货物。请编程计算这些车辆最多可以装载货物的最大重量是多少? 输入描述 第一行包含两个数,N和K(1<=N,K<=300,000); 接下来的N行中每一行都包含一对数,Wi和Vi(1<=Wi,Vi<=1,000,000); 接下来的K行中的每一行都包含一个数,Ci(1<=Ci<=100,000,000); 输入中所有的数字都是正整数。 输出描述 输出最大可能的货物总价值 用例输入 1 2 1 5 10 100 100 11 用例输出 1 10 用例输入 2 3 2 1 65 5 23 2 99 10 2 用例输出 2 164c++代码
时间: 2024-03-18 08:39:15 浏览: 130
w.rar_N.W._装箱 重量_装载_装载问题_轮船装载
```
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
struct Goods {
int weight;
int value;
bool operator<(const Goods& g) const {
return value > g.value; // 按照价值从大到小排序
}
};
int main() {
int n, k;
cin >> n >> k;
vector<Goods> goods(n);
for (int i = 0; i < n; i++) {
cin >> goods[i].weight >> goods[i].value;
}
sort(goods.begin(), goods.end()); // 按照价值从大到小排序
vector<int> capacity(k);
for (int i = 0; i < k; i++) {
cin >> capacity[i];
}
sort(capacity.begin(), capacity.end()); // 按照容量从小到大排序
int ans = 0;
int j = 0; // j 表示当前可以使用的车辆数量
for (int i = 0; i < n; i++) {
while (j < k && capacity[j] < goods[i].weight) {
j++; // 找到下一辆可以用的车
}
if (j >= k) {
break; // 没有可用的车了
}
ans += goods[i].value;
j++;
}
cout << ans << endl;
return 0;
}
```
阅读全文