File tree Expand file tree Collapse file tree 1 file changed +43
-2
lines changed
algorithm/src/acwing/algorithmBasicCourse/5_dynamic_programming Expand file tree Collapse file tree 1 file changed +43
-2
lines changed Original file line number Diff line number Diff 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===================== */
1655import (
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 }
You can’t perform that action at this time.
0 commit comments