深耕专业教研,探索前沿技术
信息技术来源:金丽衢十二校2025学年高三第二次联考

第 13 题

答案与解析

第(1)小题

参考答案

25,35,30,5

货物必须连续选取,而且各件重量均为正数。固定最后一件货物后,向左多包含一件就会增加总重量,因此只需找出以每个位置结尾、总重量不超过 100 的最长连续组合。

最后一件的位置(从 1 开始) 对应的最大载重组合 总重量
1 20 20
2 20,10 30
3 20,10,50 80
4 70 70
5 70,25 95
6 25,35 60
7 25,35,30 90
8 25,35,30,5 95
9 5,80 85

最大总重量为 95。其中 70、25 和 25、35、30、5 都满足要求,按题意选择靠后的组合,即 25、35、30、5。

第(2)小题

参考答案
  1. j<len(a)

  2. s-=a[i]

  3. s>=bests

程序分析

a=[20,10,50,70,25,35,30,5,80]
weight=100
i=j=s=0
besti=bestj=bests=0
while ①:
    ...

程序从数组首端开始处理,i、j、s 的初值均为 0;besti、bestj、bests 也初始化为 0,供后续记录候选组合。外层循环的具体处理分为加入货物、处理超载和保存候选三个部分。

s+=a[j]
j+=1

先把下标 j 对应货物的重量加到 s,再将 j 加 1。因此加入后,最新货物的下标是 j-1,j 指向下一件待加入的货物。

while i<=j and s>weight:
    ②
    i+=1

加入货物后若超载,就进入内层循环。每执行一次 i+=1,连续组合的左端便向右移动一位;当总重量不再超过 weight 时,停止这一过程。空②需要配合左端位置的变化处理重量。

if ③:
    bests=s;besti=i;bestj=j

条件成立时,程序同时保存当前总重量及两个边界,避免重量和位置记录不一致。结合先加入 a[j]、再将 j 加 1 的顺序,保存的组合范围为下标 i 到 j-1,即左闭右开的区间 [i,j)。

填空分析

①

外层循环紧接着要访问 a[j]。j 从 0 开始,每轮增加 1,最后一件货物的下标为 len(a)-1;处理完后 j=len(a),必须停止。因此填写 j<len(a)。

②

s 已包含当前连续组合的重量。移走左端货物时,应先减去当前 a[i],再由已有的 i+=1 移动左边界;若先改变 i,就会减错对象。因此填写 s-=a[i]。循环结束后,s 对应调整后的 [i,j) 区间,且不超过载重量。

③

此时当前组合已经满足载重限制。若 s 大于 bests,应保存更大的载重;若两者相等,也应覆盖旧记录,因为 j 按从左到右的顺序推进,当前组合是后出现的组合,符合“选取最后一个”的要求。因此填写 s>=bests。
补全后,本题最终记录 bests=95、besti=4、bestj=8,对应 a[4:8] 中的 25、35、30、5。