【贪心法】--最优装载问题

【贪心法】--最优装载问题

1、最优装载问题

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

问题可以描述为:

2、算法分析

【时间复杂度&&优化】  

  该算法只用一层循环,时间复杂度是O(n);

【算法精髓】

   解决最优装载问题之前,需要把所有物体按重量从小到大排序;

   该算法使用了include <algorithm>里自带的 sort(w, w + n)函数,每次向轮船里放物品也按照按物体重量从小到大的顺序向里面放

【最优量度标准】

   若当前要放物品的重量小于当前轮船的剩余容量,则可放进去,同时打印输出该物品的重量值

相关链接1

【源代码】        

#include <iostream>
#include <algorithm>
#include <cstring>
using namespace std;

// 贪心法
// 最优装载问题
void optionalLoad(int w[], int n, int C) {
    sort(w, w + n);//把所有物体按重量从小到大排序
    int retain = C;//retain记录当前剩余容量
    for(int i = 0; i < n; i++) {
        if(w[i] <= retain) {
            cout << w[i] << " ";
            retain -= w[i];
        }
    }
    cout << endl;
}

int main() {
    while(true) {
        // n个物体
        int n;
        int x[n+1];
        cout << "请输入物体总数(0退出):";
        cin >> n;
        if(!n) {
            break;
        }
        int C;//轮船的载重
        cout << "请输入不超过的总重量:";
        cin >> C;
        int w[n];//各个物品的重量
        cout << "分别输入" << n << "个物体的重量:";
        for(int i = 0; i < n; i++) {
            cin >> w[i];
        }

        cout << "最优装载为:" << endl;
        optionalLoad(w, n, C);

        cout<<"贪心选择结果为:"<<endl;
        for(int i=0; i<=n; i++)
        {
            cout<<x[i]<<" ";
        }
        cout<<endl;
    }
    return 0;
}

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值