题解 | #称砝码#

称砝码

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

  • 思路:每次加一块砝码,得到所有组合,使用set去重。这是一种思路,我看很大一部分同学都是使用n种不同砝码进行组合,那样的话时间复杂度稍微低一点,实际看个人觉得哪种方式更好理解。
while True:
    try:
        n = int(input())
        m = input().split(" ")
        x = input().split(" ")
        # mx为所有砝码,比如示例mx为[1, 1, 2]
        mx, l = [], {0}
        for i in range(n):
            mx.extend([int(m[i])] * int(x[i]))
        for i in mx:
            # 每次加一块砝码,使用union(并集)得到新去重的组合,如果不使用union则稍微麻烦一点,需要考虑循环中改变set
            l = l.union({i+j for j in l})
        print(len(l))
    except:
        break
全部评论
mx.extend([int(m[i])] * int(x[i]))想不到啊想不到
3 回复 分享
发布于 2022-08-05 17:26
新的重量也无非是前面有的重量加上一个新重量得到的,妙啊
2 回复 分享
发布于 2022-09-11 17:11 上海
如: a = ['1', '2', '3', '4'] a.extend('45'*2)#['1', '2', '3', '4', '4', '5', '4', '5'] a.extend(['45']*2)#['1', '2', '3', '4', '45', '45']
2 回复 分享
发布于 2022-06-12 21:20
我将10-12行代码替换成下面这段代码后: for i in weightlist: for j in wei: wei = wei.union({i + j}) 为什么会运行超时呢?有人解答下吗?
点赞 回复 分享
发布于 2023-08-18 16:19 广东
是我想的复杂了吗,在加的时候不会加重吗,比如[1,2,2]两个的组合是[1+2,2+2]第三轮遍历会导致有[1+2+1]这种吧,就是重复使用同一个砝码(只有一个的)
点赞 回复 分享
发布于 2023-03-18 21:55 河南
思维牛逼
点赞 回复 分享
发布于 2022-08-26 09:27 四川
不加[]extend得到的结果不正确
点赞 回复 分享
发布于 2022-06-12 21:14
第九行为啥[int(m[i])]外边要加[],而int(x[i])不用啊
点赞 回复 分享
发布于 2022-04-06 20:34

相关推荐

不愿透露姓名的神秘牛友
07-03 17:37
点赞 评论 收藏
分享
评论
33
12
分享

创作者周榜

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