洛谷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) }

  笔试加油吧

posted @ 2022-06-05 22:27  tiany7  阅读(31)  评论(0编辑  收藏  举报