题解 | #称砝码#

称砝码

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)

全部评论

相关推荐

不愿透露姓名的神秘牛友
07-07 13:46
点赞 评论 收藏
分享
06-08 22:25
门头沟学院 Java
从零开始的转码生活:这hr不会打开手机不分青红皂白给所有人群发这句话,过一会再给所有人再发一遍,这肯定会有重复的,不管,再过一会再发一遍
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务