# 二维费用的背包问题
对于每件物品,具有两种不同的费用,存在两种不同的限制。一般形式是对物品总数的限制。
从一维扩展到二维
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int N, V, M;
N = scanner.nextInt(); // n个物品
V = scanner.nextInt(); // 背包总体积
M = scanner.nextInt(); // 背包总重量
int[][]f = new int[V+1][M+1];
for (int i = 0; i < N; i++) { // 枚举物品
int v = scanner.nextInt();// 单个物品体积
int w = scanner.nextInt();// 单个物品重量
int val = scanner.nextInt(); // 单个物品价值
for (int j = V; j>=v; j--){
for(int k = M; k>= w; k--){
f[j][k] = Math.max(f[j][k], f[j- v][k-w] + val);
}
}
}
System.out.println(f[V][M]);
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26