Skip to content

Commit ef5db9c

Browse files
committed
acwing: optimize 3_complete_knapsack_backpack_problem.go
1 parent b709054 commit ef5db9c

File tree

1 file changed

+43
-2
lines changed

1 file changed

+43
-2
lines changed

algorithm/src/acwing/algorithmBasicCourse/5_dynamic_programming/3_complete_knapsack_backpack_problem.go

Lines changed: 43 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,45 @@ package __dynamic_programming
1313
当k = 0时,其实就是0个的表达式。所以这两个状态的表达式可以合并为第二个表达式。
1414
**/
1515

16+
/* =====================朴素===================== */
17+
// import (
18+
// "fmt"
19+
// )
20+
21+
// const N = 1010
22+
23+
// var (
24+
// // n中物品,背包容量为m
25+
// n, m int
26+
// v, w [N]int
27+
// f [N][N]int
28+
// )
29+
30+
// func max(a, b int) int {
31+
// if a > b {
32+
// return a
33+
// }
34+
// return b
35+
// }
36+
37+
// func main() {
38+
// fmt.Scan(&n, &m)
39+
// for i := 1; i <= n; i++ {
40+
// fmt.Scan(&v[i], &w[i])
41+
// }
42+
43+
// for i := 1; i <= n; i++ {
44+
// for j := 0; j <= m; j++ {
45+
// for k := 0; k*v[i] <= j; k++ {
46+
// f[i][j] = max(f[i][j], f[i-1][j-k*v[i]]+k*w[i])
47+
// }
48+
// }
49+
// }
50+
51+
// fmt.Println(f[n][m])
52+
// }
53+
54+
/* =====================优化一层for===================== */
1655
import (
1756
"fmt"
1857
)
@@ -41,8 +80,10 @@ func main() {
4180

4281
for i := 1; i <= n; i++ {
4382
for j := 0; j <= m; j++ {
44-
for k := 0; k*v[i] <= j; k++ {
45-
f[i][j] = max(f[i][j], f[i-1][j-k*v[i]]+k*w[i])
83+
f[i][j] = f[i-1][j]
84+
if j >= v[i] {
85+
// 状态方程变形一下,可以去掉k,优化一层for
86+
f[i][j] = max(f[i][j], f[i][j-v[i]]+w[i])
4687
}
4788
}
4889
}

0 commit comments

Comments
 (0)