Skip to content

Commit 45f783f

Browse files
committed
更快的写法
1 parent 2a6d895 commit 45f783f

File tree

1 file changed

+12
-13
lines changed

1 file changed

+12
-13
lines changed

misc/loj/p160.go

+12-13
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package main
33
import (
44
. "fmt"
55
"io"
6+
"slices"
67
)
78

89
// https://space.bilibili.com/206214
@@ -23,26 +24,24 @@ func p160(in io.Reader, out io.Writer) {
2324
Fscan(in, &a[i].v)
2425
}
2526

26-
f := make([][]int, 1, n+1)
27-
f[0] = make([]int, W+1)
28-
var dfs func(int) int
29-
dfs = func(v int) int {
27+
var dfs func(int, []int) ([]int, int)
28+
dfs = func(v int, pre []int) ([]int, int) {
3029
size := 1
30+
t := pre
3131
for _, w := range g[v] {
32-
size += dfs(w)
32+
f, sz := dfs(w, t)
33+
t = f
34+
size += sz
3335
}
34-
t := f[len(f)-size]
35-
cur := append(t[:0:0], t...)
36+
f := slices.Clone(pre)
3637
p := a[v]
37-
t = f[len(f)-1]
3838
for j := W; j >= p.w; j-- {
39-
cur[j] = max(cur[j], t[j-p.w]+p.v)
39+
f[j] = max(f[j], t[j-p.w]+p.v)
4040
}
41-
f = append(f, cur)
42-
return size
41+
return f, size
4342
}
44-
dfs(0)
45-
Fprint(out, f[n][W])
43+
f, _ := dfs(0, make([]int, W+1))
44+
Fprint(out, f[W])
4645
}
4746

4847
//func main() { p160(bufio.NewReader(os.Stdin), os.Stdout) }

0 commit comments

Comments
 (0)