Skip to content

Commit 0cd84d7

Browse files
author
骏钰 王
committed
feat: 完全背包问题
完全背包问题 Change-Id: I9ea91200ba29e448ed7575ff1636898751a164d9
1 parent 694cb89 commit 0cd84d7

File tree

1 file changed

+42
-0
lines changed

1 file changed

+42
-0
lines changed

main/com/ect/bag/CompleteBag.java

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
package com.ect.bag;
2+
3+
/**
4+
* 完全背包问题
5+
* 完全背包是每个物品都无限
6+
*
7+
* F[i,v] = max{F[i − 1,v],F[i,v − Ci] + Wi}
8+
*
9+
* 如果用一维数组来表示的话,F[v]在左值时表示的是这一阶段的,要保证右面的F[v]是上一阶段的,而F[v-ci]是这一阶段的,所以~顺序计算!!
10+
*
11+
* Created by Mr Wang :) on 18-1-30.
12+
*/
13+
public class CompleteBag {
14+
15+
16+
public void compelete(int[][] nums, int[] weights, int[] values, int capacity) {
17+
18+
for (int i = 0; i < weights.length; i++) {
19+
20+
for (int j = weights[i]; j < capacity; j++) {
21+
for (int k = 0; k * weights[i] < j; k++) {
22+
nums[i][j] = Math.max(nums[i - 1][j], nums[i - 1][j - k * weights[i]] + k * values[i]);
23+
}
24+
}
25+
}
26+
27+
}
28+
29+
// 完全背包是顺序
30+
void bagBak(int[] nums, int[] weight, int[] values, int capacity) {
31+
32+
for (int i = 1; i <= weight.length; i++) {
33+
34+
// 顺序,背包容量逐渐变大,能放下物品i就放
35+
for (int j = weight[i]; j <= capacity; j++) {
36+
nums[j] = Math.max(nums[j], nums[j - weight[i]] + values[i]);
37+
}
38+
}
39+
}
40+
41+
42+
}

0 commit comments

Comments
 (0)