一个贪心算法题,C++实现
该问题是这样的,一共有n个物体和m个容器,每个物体有两个维度性质ai和di,容器有性质Ai和Di,我们定义一个物体i可以被装进容器j当且仅当ai<=Aj并且di<=Dj,求能装的最大数量。用C++代码完成
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
struct Object {
int a, d;
};
struct Container {
int A, D;
};
int main() {
int n, m;
cin >> n >> m;
vector<Object> objs(n);
vector<Container> cons(m);
for (int i = 0; i < n; ++i) {
cin >> objs[i].a >> objs[i].d;
}
for (int j = 0; j < m; ++j) {
cin >> cons[j].A >> cons[j].D;
}
// 将物体按 di 升序排序
sort(objs.begin(), objs.end(), [](const Object& a, const Object& b){
return a.d < b.d;
});
// 贪心算法,从 di 最小的物体开始判断是否可以装入目前未满的容器
int ans = 0;
for (int i = 0; i < n; ++i) {
for (int j = 0; j < m; ++j) {
if (objs[i].a <= cons[j].A && objs[i].d <= cons[j].D) {
ans++;
cons[j].A -= objs[i].a;
cons[j].D -= objs[i].d;
break;
}
}
}
cout << ans << endl;
return 0;
}

浙公网安备 33010602011771号