C++ 贪心算法最优装载问题

喜夏-厌秋 提交于 2020-03-09 03:15:26

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

#include <iostream>
#include <algorithm>
using namespace std;
struct load{  //结构体定义集装箱的编号和重量
    int index;
    int w;}box[1001];  //初始化结构体数组
bool cmp(load a,load b){  //自定义sort函数cmp,按照从小到大的顺序排列
    if(a.w<b.w) return true;
    else return false;
    };
int main()
{
    int c,n;  //c为货船的载重,n为集装箱的个数
    int x[1001]; //此数组用来控制已装载的集装箱编号
    while(cin>>c>>n){
        memset(box, 0, sizeof(box)); //每次输入都要将数组box和x清零
        memset(x, 0, sizeof(x));
        for(int i=1;i<=n;i++){
            cin>>box[i].w;  //输入重量、把编号定义为数组下标
            box[i].index=i;}
        stable_sort(box,box+n+1,cmp);  //稳定排序,用sort也可
        if(box[1].w>c) {cout<<"no  answer"; continue;}
        int j;
        for(j=1;j<=n&&box[j].w<=c;j++){
            x[box[j].index]=1;
            c-=box[j].w;}
        cout<<j-1<<endl;
        for(j=1;j<=n;j++){
        if(x[j]) cout<<j<<" ";
        }
    }
}
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!