ALGO-21 装箱问题

ALGO-21 装箱问题

题目

资源限制

内存限制:256.0MB C/C++时间限制:1.0s Java 时间限制:3.0s Python 时间限制:5.0s

问题描述

有一个箱子容量为 V(正整数,0 <= V <= 20000),同时有 n 个物品(0 < n <= 30),每个物品有一个体积(正整数)。
要求 n 个物品中,任取若干个装入箱内,使箱子的剩余空间为最小。

输入格式

第一行为一个整数,表示箱子容量;
第二行为一个整数,表示有 n 个物品;
接下来 n 行,每行一个整数表示这 n 个物品的各自体积。

输出格式

一个整数,表示箱子剩余空间。

样例输入

24
6
8
3
12
7
9
7

样例输出

0

代码

import java.util.Scanner;

public class ALGO_21 {

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int V = scanner.nextInt();
        int n = scanner.nextInt();
        int[] values = new int[n];
        for (int i = 0; i < values.length; i++) {
            values[i] = scanner.nextInt();
        }
        scanner.close();
        System.out.println(V - push(values, V));
    }

    private static int push(int[] values, int v) {
        int[] dp = new int[v + 1];
        for (int i = 0; i < values.length; i++) {
            for (int j = v; j >= values[i]; j--) {
                dp[j] = Math.max(dp[j], dp[j - values[i]] + values[i]);
            }
        }
        return dp[v];
    }
}
posted @ 2022-04-03 12:25  morning-start  阅读(34)  评论(0编辑  收藏  举报