01背包问题-Java
/**
* 01背包问题
* 第一行输入两个整数m,n,背包重量为m,物品数量为n
* 然后输入n行,分别输入物品的重量w、一个空格和物品价值v
* <p>
* 要求输出背包能装的最大价值
* <p>
* 示例
* <p>
* 输入:
* 10 4
* 2 1
* 3 3
* 4 5
* 7 9
* <p>
* 输出:
* 12
*/
import java.util.Scanner;
public class Main15 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int[][] dp = new int[50][300];
int[] w = new int[50];
int[] v = new int[50];
int m = 0;
int n = 0;
m = sc.nextInt();
n = sc.nextInt();
for (int i = 1; i <= n; i++) {
w[i] = sc.nextInt();
v[i] = sc.nextInt();
}
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= m; j++) {
if (j < w[i]) {
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[n][m]);
//将dp数组打印出来
// for (int i = 0; i <= n; i++) {
// for (int j = 0; j <= m; j++) {
// System.out.print(dp[i][j]+" ");
// }
// System.out.println();
// }
}
}

浙公网安备 33010602011771号