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];
}
}