*部分背包问题可有贪心法求解:计算Pi/Wi数据结构:w[i]:第i个背包的重量;p[i]:第i个背包的价值;

行业问题 背包,数据结构,重量 已帮助 人

*部分背包问题可有贪心法求解:计算Pi/Wi

数据结构:

w[i]:第i个背包的重量;

p[i]:第i个背包的价值;

1.0-1背包: 每个背包只能使用一次或有限次(可转化为一次):

A.求最多可放入的重量。

热搜:分治法求解不需要满足的条件是

答案解析

难度★★☆ 搜索
  • 正确答案:

    NOIP2001 装箱问题
    有一个箱子容量为v(正整数,o≤v≤20000),同时有n个物品(o≤n≤30),每个物品有一个体积 (正整数)。要求从 n 个物品中,任取若千个装入箱内,使箱子的剩余空间为最小。
    l 搜索方法
    procedure search(k,v:integer); {搜索第k个物品,剩余空间为v}
    var i,j:integer;
    begin
    if v<best then best:=v;
    if v-(s[n]-s[k-1])>=best then exit; {s[n]为前n个物品的重量和}
    if k<=n then begin
    if v>w[k] then search(k+1,v-w[k]);
    search(k+1,v);
    end;
    end;

    l DP
    F[I,j]为前i个物品中选择若干个放入使其体积正好为j的标志,为布尔型。
    实现:将最优化问题转化为判定性问题
    f [I, j] = f [ i-1, j-w[i] ] (w[I]<=j<=v) 边界:f[0,0]:=true.
    For I:=1 to n do
    For j:=w[I] to v do F[I,j]:=f[I-1,j-w[I]];
    优化:当前状态只与前一阶段状态有关,可降至一维。
    F[0]:=true;
    For I:=1 to n do begin
    F1:=f;
    For j:=w[I] to v do
    If f[j-w[I]] then f1[j]:=true;
    F:=f1;
    End;