题目描述
有一个箱子容量为 VV(正整数,0≤V≤20000),同时有 n 个物品(0<n≤30,每个物品有一个体积(正整数)。
要求n个物品中,任取若干个装入箱内,使箱子的剩余空间为最小。
输入描述
1 个整数,表示箱子容量
1 个整数,表示有 nn 个物品
接下来 n 行,分别表示这 n 个物品的各自体积
输出描述
1 个整数,表示箱子剩余空间。
样例输入 1
24
6
8
3
12
7
9
7
样例输出 1
0
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner read = new Scanner(System.in);
int V = read.nextInt();
int n = read.nextInt();
int[] res = new int[n+1];
int[][] dp = new int[n+1][V+1];
for(int i=1;i<=n;i++)
{
res[i] = read.nextInt();
}
for(int i=1;i<=n;i++)
for(int j=1;j<=V;j++)
{
if(j>=res[i])
dp[i][j] = Math.max(dp[i-1][j], dp[i-1][j-res[i]]+res[i]);
else
dp[i][j] = dp[i-1][j];
}
System.out.println(V - dp[n][V]);
read.close();
}
}