题目描述:
给定一艘容量为C的船,给定一批货物,货物i的重量是wi,要求在船不超重的前提下,将尽可能多的货物装上船。
思路:
尽可能多的装上船,就像活动安排问题一样,先对集装箱的重量从小到大排序,在集装箱重量不超过轮船载重量的情况下先装轻的,装上之后在用一个布尔型数组赋值为1,表示装上船,方便输出
代码:
#include<iostream>
#include<cstring>
using namespace std;
bool A[100];
int sum = 0;
void sort(int w[],int n) {
for(int i = 0; i < n; i++) {
for(int j = i + 1; j < n; j++) {
if(w[i] > w[j]) {
int t = w[i];
w[i] = w[j];
w[j] = t;
}
}
}
}
void Loading(int w[],int n,int c) {
memset(A,0,sizeof(A));
for(int i = 0; i < n; i++) {
if(w[i] <= c && A[i] == 0) {
c -= w[i];
A[i] = 1;
sum++;
}
}
}
void display(int w[],int n) {
for(int i = 0; i < n; i++) {
if(A[i]) cout<<w[i]<<" ";
}
}
int main() {
int c;//轮船的载重量
int w[100];//货物的重量
int n;//有几个货物
cin>>c;
cin>>n;
for(int i = 0; i < n; i++) {
cin>>w[i];
}
sort(w,n);
Loading(w,n,c);
cout<<"装在船上的货物有:";
display(w,n);
cout<<endl;
cout<<"集装箱的个数:"<<sum;
return 0;
}