有N件物品,第i件物品的重量是w[i],价值是p[i]。
有一个背包,背包的承重是W。
求解:将哪些物品装入背包可获得最大价值。
实例说明
有如下物品,给定每件物品的重量和价值:
物品 重量 价值
葡萄 2 3
矿泉水 3 5
西瓜 4 6
有一个背包,承重是6。
请求出背包放入物品的最大价值。
————————————————
package com.yupi.project.algorithm;
import java.util.Scanner;
public class BagSolution {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while (true) {
int maxCapacity = sc.nextInt();
int number = sc.nextInt();
int [] weight = new int[number];
int [] value = new int[number];
for (int i = 0; i < number; i++) {
weight[i] = sc.nextInt();
value [i] = sc.nextInt();
}
int [][] dp = new int[number+1][maxCapacity+1];
for (int i = 0; i <= number; i++) {
for (int j = 0; j <= maxCapacity; j++) {
if ( i0 || j0 ) continue;
if (weight[i-1] > j) {
dp [i][j] = dp[i-1][j];
} else {
dp[i][j] = Math.max(
dp[i-1][j],
value[i-1]+ dp[i-1][j-weight[i-1]]);
//完全背包
// int k =j/weight[i-1];
// dp[i][j] = Math.max(
// dp[i-1][j],
// k * value[i-1]+ dp[i-1][j-k * weight[i-1]]);
}
}
}
System.out.println(dp[number][maxCapacity]);
}
}
}