现有一个容量大小为V的背包和N件物品,每件物品有两个属性,体积和价值,请问这个背包最多能装价值为多少的物品?
现有一个容量大小为V的背包和N件物品,每件物品有两个属性,体积和价值,请问这个背包最多能装价值为多少的物品?
第一行两个整数V和n。
接下来n行,每行两个整数体积和价值。1≤N≤1000,1≤V≤20000。
每件物品的体积和价值范围在[1,500]。
输出背包最多能装的物品价值。
6 3 3 5 2 4 4 2
9
import java.util.Scanner; public class Main{ public static void main(String[] args){ Scanner sc = new Scanner(System.in); int capicaty = sc.nextInt(); int nums = sc.nextInt(); int[] w = new int[nums + 1]; int[] v = new int[nums + 1]; for(int i = 1; i < nums + 1; i++){ w[i] = sc.nextInt(); v[i] = sc.nextInt(); } int[][] dp = new int[nums + 1][capicaty + 1]; for(int i = 1; i < nums + 1; i++){ for(int j = 1; j <= capicaty; j++){ if(w[i] > j){ dp[i][j] = dp[i - 1][j]; }else{ dp[i][j] = Math.max(dp[i - 1][j], dp[i - 1][j - w[i]] + v[i]); } } } System.out.println(dp[nums][capicaty]); } }