实验十
1.问题
有一批集装箱要装上一艘载重量为c的轮船。其中集装箱i的重量为Wi。最优装载问题要求确定在装载体积不受限制的情况下,将尽可能多的集装箱装上轮船。
2.解析
思路:轻者先装,直到再装任何集装箱将使轮船载重量超过 C 时停止。
证明:I 必然是 N 的最优解,采用反证法,即假设 I 不是 N 的最优解。
3.设计
#include<stdio.h>
#include<stdlib.h>
void outputResult(int* r, int len) {
printf("结果:");
for (int i = 0; i < len; i++)
{
printf("%d", r[i]);
}
printf("\n");
}
//冒泡排序
void sortBox(int* box, int n) {
for (int i = n - 1; i > 0; i--)
{
for (int j = 0; j < i; j++) {
if (box[j] > box[j + 1]) {
int temp = box[j];
box[j] = box[j + 1];
box[j + 1] = temp;
}
}
}
}
void loading(int* box, int* r, int w, int n) {
r[0] = 1;
w -= box[0];
for (int i = 1; i < n; i++)
{
if (w - box[i] >= 0) {
w -= box[i];
r[i] = 1;
}
}
}
int main()
{
int w = 100;
int box[6] = { 100,20,25,25,20,20 };
sortBox(box, 6);
int result[6] = { 0 };
loading(box, result, w, 6);
outputResult(result, 6);
getchar();
return 0;
}
4.分析
O(n)=nlogn
5.源码
链接:源代码