题解 | #称砝码#

称砝码

https://www.nowcoder.com/practice/f9a4c19050fc477e9e27eb75f3bfd49c

package main

import (
	"fmt"
)

func main() {
	var n int
	fmt.Scan(&n)
	
    weights := make([]int, n)
	for i := 0; i < n; i++ {
		var w int
		fmt.Scan(&w)
		weights[i] = w
	}
    
    all := []int{}	// 所有元素装到一个切片里
	for i := 0; i < n; i++ {
		var num int
		fmt.Scan(&num)
        for j:=0;j<num;j++{
            all = append(all, weights[i])
        }
	}
    
    set := map[int]struct{}{0:struct{}{}}	// 用map当作set用
    for _,v := range all{
        temp := []int{}
        for k,_ := range set {		// map是引用类型,要先深度拷贝,不然后面的循环会循环到新增元素
            temp = append(temp,k)
        }
        for _,k := range temp{
            set[k+v] = struct{}{}
        }
    }
    fmt.Println(len(set))
    
}
// 本题输入为三行数字,所以采用: fmt.Scan(&n)

全部评论

相关推荐

10-28 15:45
门头沟学院 C++
西南山:海康威视之前不是大规模裁员吗
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务