问题背景:
有一批集装箱要装上一艘载重量为c的轮船。其中集装箱i的重量为Wi。最优装载问题要求确定在装载体积不受限制的情况下,将尽可能多的集装箱装上轮船。
实现思路:
只需要保证每次装入的箱子都是可供选择的质量最小的。
第一步:将箱子排序,实现质量的递增排序
第二步:以此从数组头取箱子,并且判断其质量是否满足目前轮船剩余的装载质量
cpp实现:
#include <bits/stdc++.h>
int main(){
int w=100;// 船最大载重
int box[6]={100,30,25,25,30,90};//箱子重量
int result[6]={0};//用于输出排序后装入穿上的箱子的重量
void BubbleSort(int *box,int n);
void Load(int *box,int n,int *r,int w);
BubbleSort(box,6);
Load(box,6,result,w);
for(int i=0;i<6;i++){
if(result[i]==1){
printf("%d ",box[i]);
}
}
return 1;
}
void BubbleSort(int *box,int n){
for(int i=0;i<5;i++){
for(int j=0;j<5-i;j++){
if(box[j]>box[j+1]){//swap
int temp=box[j+1];
box[j+1]=box[j];
box[j]=temp;
}
}
}
}
void Load(int *box,int n,int *r,int w){
r[0]=1;
w-=box[0];
for(int i=1;i<n;i++){
if(w-box[i]>0){
w-=box[i];
r[i]=1;
}
}
}
能装入的箱子的质量分别为: