#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