算法分析与设计实践(作业十):装载问题[0/1背包] / 相容问题 [贪心法]
1. 问题
(1)装载问题
(2)相容问题
2. 解析
(1)装载问题
(2)相容问题
证明对于任意正整数 k,算法的前 k 步选择都能导致一个最优解。
3. 分析
(1)装载问题
算法复杂度 O(nlogn)
(2)相容问题
算法复杂度 O(n)
4. 设计
(1)装载问题
int main() {
输入n和c //n个集装箱,C的载重量
输入w
对w从小到大排序
循环遍历w
如果当前的值w超过c
break
否则
c-=w;
tmp++;
}
(2)相容问题
struct node {
int s, f; //开始结束时间
}t[maxn], ans[maxn];
//t数组存储初始时间,ans存储安排
int main() {
输入截止时间和开始时间;
按截止时间f从小到大排序;
k = 1;
ans[1] = t[1];
for i = 2 to n do
if t[i].s >= ans[k].f //逐一比较,相容
then ans[++k] = t[i]; //时间安排放入ans中
输出
}