首页 > 试题广场 >

装箱问题

[编程题]装箱问题
  • 热度指数:518 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
有一个箱子容量为 V ,同时有n个物品,每个物品有一个体积(正整数)。每个物品只能使用一次。
要求n个物品中,任取若干个装入箱内,使箱子的剩余空间为最小。

数据范围: ,每个物品的体积满足
示例1

输入

24,[8,3,12,7,9,7]

输出

0
    public int boxin (int V, ArrayList<Integer> num) {
        // write code here
        boolean[] dp = new boolean[V+1];
        dp[0] = true;
        for(int x : num) {
            for(int i = V; i >= x; --i) {
                dp[i] = dp[i] || dp[i-x];
            }
        }
        int m = V;
        while(!dp[m]) {
            --m;
        }
        return V - m;
    }

发表于 2022-03-03 00:57:30 回复(0)

解题思路:

  1. 这题与0-1背包问题很相似,能不能直接套用公式?但似乎缺少价值这一参数,以及要求解空间最小

  2. 0-1背包追求价值最大,如何设置适当的价值使问题转化?注意到 V - minV是背包中已被占用的最大空间,若用这些空间表示价值,就变成了0-1背包问题

  3. w=n,c=n求解0-1背包解res,该问题就是V-res

发表于 2022-11-16 16:51:35 回复(0)