洛谷P1566 加等式 golang乱搞
好久没写算法了,6.12还得做腾讯笔试,惨
自从工作以来能逐渐感觉到求知欲和对探索的兴趣在逐渐减退,可能大学最有意义的就是让我们在一个相对纯粹的环境里去探索,然后开启一辈子的工作吧
golang乱搞一下,简单dp嘛
先用cpp写了一遍,然后用golang又写了一遍
package main
import (
"bufio"
. "fmt"
"io"
"os"
)
func run(_r io.Reader, out io.Writer) {
in := bufio.NewReader(_r)
kase := 0
Fscan(in, &kase)
for k := 1; k <= kase; k++ {
var n int
Fscan(in, &n)
a := make([]int, n+1)
max_element := func(arr []int) int {
max := func(x, y int) int {
if x > y {
return x
}
return y
}
ans := 0
for i := 1; i <= n; i++ {
ans = max(a[i], ans)
}
return ans
}
for i := 1; i <= n; i++ {
Fscan(in, &a[i])
}
maxx := max_element(a)
dp := make([]int, maxx+1)
dp[0] = 1
for i := 1; i <= n; i++ {
for j := maxx; j >= a[i]; j-- {
dp[j] += dp[j-a[i]]
}
}
ans := 0
for i := 1; i <= n; i++ {
ans += dp[a[i]] - 1
}
Fprintln(out, ans)
}
}
func main() { run(os.Stdin, os.Stdout) }
笔试加油吧