一个贪心算法题,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;
}

posted @ 2023-09-07 16:01  xc0514  阅读(32)  评论(0)    收藏  举报