问答题

阅读下列说明和C代码,回答问题1至问题3,将解答写在答题纸的对应栏内。
【说明】
设有n个货物要装入若干个容量为C的集装箱以便运输,这n个货物的体积分别为{S1,S2,...,Sn},且有si≤C(1≤i≤ n)。为节省运输成本,用尽可能少的集装箱来装运这n个货物。
下面分别采用最先适宜策略和最优适宜策略来求解该问题。
最先适宜策略( firstfit)首先将所有的集装箱初始化为空,对于所有货物,按照所给的次序,每次将一个货物装入第一个能容纳它的集装箱中。
最优适宜策略( bestfit)与最先适宜策略类似,不同的是,总是把货物装到能容纳它且目前剩余容量最小的集装箱,使得该箱子装入货物后闲置空间最小。
【C代码】
下面是这两个算法的C语言核心代码。
(1)变量说明
    n:货物数
    C:集装箱容量
    s:数组,长度为n,其中每个元素表示货物的体积,下标从0开始
    b:数组,长度为n,b[i]表示第i+1个集装箱当前已经装入货物的体积,下标从0开始
    i,j:循环变量
    k:所需的集装箱数
    min:当前所用的各集装箱装入了第i个货物后的最小剩余容量
    m:当前所需要的集装箱数
    temp:临时变量
(2)函数firstfit
int firstfit(){
    inti,j;
    k=0:
    for(i=0;i<n;i++){
  b[i]=0;
    }
    for(i=0;i<n;i++){
      (1);
      while(C-b[j]<s[i]){
    j++;
      }
      (2);
k=k>(j+1)?k:(j+1);
  }
  returnk;
}
(3)函数bestfit
int bestfit() {
  int i,j,min,m,temp;
  k=0;
  for(i=0;i<n;i++){
    b[i]=0;
  }
  for (i=0;i<n;i++){
    min=C;
    m=k+l;
    for(j=0;j< k+l;j++){
  temp=C- b[j] - s[i];
  if(temp>0&&temp< min){
    (3)    ;
    m=j,
  }
    }
    (4);
    k=k>(m+1)?k:(m+1);
  }
  return k;
}

根据[说明]和[C代码],填充C代码中的空(1)~(4)。

【参考答案】

(1)j=0 (2)b[j]=b[j]+s[i] 及其等价形式 (3)min=temp (4)b[m]=b[m]+s[i......

(↓↓↓ 点击下方‘点击查看答案’看完整答案、解析 ↓↓↓)