最优装载:
有一批集装箱要装上一艘载重量为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<<" ";
}
}
}
来源:CSDN
作者:CN_CPJ
链接:https://blog.csdn.net/qq_45836790/article/details/104679502