贪心法——最优装载问题
最优装载问题。给出 n 个物体,第 i 个物体重量为 wi 。选择尽量多的物体,使得总重量不超过 C 。
只关心物体的数量,这样只需把所有物体按重量从小到大排序,依次选取每个物体,直到装不下为止。这就是一种典型的贪心算法,只顾眼前,但在一定程度上却能得到最优解。
最优装载问题实现算法
// 贪心法
// 最优装载问题
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;
}
测试主程序
#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[n];
cout << "分别输入" << n << "个物体的重量:";
for(int i = 0; i < n; i++) {
cin >> a[i];
}
cout << "最优装载为:" << endl;
optionalLoad(a, n, C);
}
return 0;
}
输出数据
请输入物体总数(0退出):5
请输入不超过的总重量:10
分别输入5个物体的重量:5 3 2 4 1
最优装载为:
1 2 3 4
请输入物体总数(0退出):3
请输入不超过的总重量:3
分别输入3个物体的重量:5 7 4
最优装载为:
请输入物体总数(0退出):2
请输入不超过的总重量:10
分别输入2个物体的重量:2 6
最优装载为:
2 6
请输入物体总数(0退出):0
Process returned 0 (0x0) execution time : 31.096 s
Press any key to continue.