贪心法——最优装载问题

来源:互联网 发布:中国人工智能协会 编辑:程序博客网 时间:2024/05/19 11:45

贪心法——最优装载问题

最优装载问题。给出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退出):0Process returned 0 (0x0)   execution time : 31.096 sPress any key to continue.
0 0