题解 | #称砝码#

称砝码

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

n = int(input())
weights = list(map(int, input().split()))
numbers = list(map(int, input().split()))
hashset = set()


# def dfs(now, sum):
#     if now == n:
#         hashset.add(sum)
#         # print(now, sum)
#         return
#     for i in range(numbers[now]+1):
#         dfs(now + 1, sum + i * weights[now])


# dfs(0, 0)
# print(len(hashset))

# 动态规划
ans = {0}
for i in range(n):
    w = weights[i]
    for num in range(numbers[i]):
        tmp = ans.copy()
        for x in tmp:
            ans.add(x + w)

        # print(w, num, ans)
print(len(ans))

一开始用了暴力法,果断超时了。后来发现动态规划,假设我有一堆砝码和它们能称出来的所有重量,现在往里面加入一个砝码,那么能称的所有重量就是 `S := set(w + s for s in S)`,这就得到转移方程。

注意我们要模拟每次加一个砝码的过程,如果完全不加那就是初始状态,每次加一个`w`,一共加`num`次,即可。

全部评论

相关推荐

工科女的日常:真诚建议:别再用这种花哨的模板,可以看看我发的那个零经验找实习发帖子
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
03-01 23:20
野猪不是猪🐗:美团4000hc就离谱,这是把26实习和25春招的直接加一起了?
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
正在热议
更多
# 腾讯音乐求职进展汇总 #
67483次浏览 364人参与
# 机械人的薪资开到多少,才适合去? #
91592次浏览 396人参与
# 招行数字金融训练营 #
53833次浏览 251人参与
# 携程求职进展汇总 #
217660次浏览 1889人参与
# 投递几十家公司,到现在0offer,大家都一样吗 #
181835次浏览 1314人参与
# 面试之前应该如何准备? #
9136次浏览 307人参与
# 腾讯云智研发2025实习生招聘 #
33954次浏览 354人参与
# 如何看待应届生身份? #
13914次浏览 252人参与
# 通信和硬件还有转码的必要吗 #
48117次浏览 494人参与
# 双非本科的出路是什么? #
111302次浏览 1083人参与
# 0offer互助地 #
303417次浏览 2530人参与
# 你遇到过哪些神仙同事 #
55782次浏览 552人参与
# 总结:offer选择,我是怎么选的 #
102126次浏览 740人参与
# 选了这个offer,你有没有后悔? #
499772次浏览 3606人参与
# 腾讯云智研发工作体验 #
15533次浏览 121人参与
# 工作中,努力重要还是选择重要? #
89049次浏览 1218人参与
# 招银网络求职进展汇总 #
95646次浏览 608人参与
# lastday知无不言 #
42856次浏览 404人参与
# 学历or实习经历,哪个更重要 #
81024次浏览 625人参与
# 第一份工作应该选高薪还是热爱? #
38738次浏览 347人参与
# 今年秋招哪家公司给的薪资最良心? #
188987次浏览 1109人参与
# 毕业后不工作的日子里我在做什么 #
150347次浏览 1313人参与
牛客网
牛客企业服务