最优装载问题--贪心算法

#include <iostream>
#include <algorithm>

using namespace std;

// 贪心法
// 最优装载问题
void optionalLoad(int *a, int n, int C) {
    sort(a, a + n);
    int retain = C;
    for (int i = 0; i < n; i++) {
        if (a[i] <= retain) {
            cout << a[i] << " ";
            retain -= a[i];
        }
    }
    cout << endl;
}

int main() {
    while (true) {
        // n个物体
        int n;
        cout << "请输入物体总数(0退出):";
        cin >> n;
        if (!n) {
            break;
        }
        int C;
        cout << "请输入不超过的总重量:";
        cin >> C;
        int* a = new int[n];
        //int num;
        //        int a[n];
        //cin >> num;
        //int* a = new int[num];
        //    delete[] a;
        cout << "分别输入" << n << "个物体的重量:";
        for (int i = 0; i < n; i++) {
            cin >> a[i];
        }
        
        cout << "最优装载为:" << endl;
        optionalLoad(a, n, C);
    }
    
    return 0;
}

用贪心算法解决如下问题

问题:有一批集装箱要装上一艘载重量为c的轮船。其中集装箱i的重量为wi。最优装载问题要求在装载体积不受限制的情况下,将尽可能多的集装箱装上轮船。

举例:假设c=20,w={5,6,7,8,9},则输出 5  6  7

猜你喜欢

转载自www.cnblogs.com/wxh-blos/p/12093515.html