问题描述
有一个箱子容量为V(正整数,0<=V<=20000),同时有n个物品(0<n<=30),每个物品有一个体积(正整数)。
要求n个物品中,任取若干个装入箱内,使箱子的剩余空间为最小。
输入格式
第一行为一个整数,表示箱子容量;
第二行为一个整数,表示有n个物品;
接下来n行,每行一个整数表示这n个物品的各自体积。
输出格式
一个整数,表示箱子剩余空间。
样例输入
24
6
8
3
12
7
9
7
样例输出
0
相当于简单的01背包问题,使用动态规划
每个状态的最优解,都是根据之前的状态的最优解获得的。
例如:背包容量10 物品为4、8、5
dp[i][j]中的值为第i件物品为备选,容量为j时的最大值。
状态转移方程:
if(goods[i] <= j)
dp[i][j] = Math.max(dp[i-1][j-goods[i]]+goods[i], dp[i-1][j]);
else
dp[i][j] = dp[i-1][j];