牛客网称砝码问题,不同重量砝码分别不同个数,能称出多少不同重量,代码及解题思路

题目描述
现有一组砝码,重量互不相等,分别为m1,m2,m3…mn;
每种砝码对应的数量为x1,x2,x3…xn。现在要用这些砝码去称物体的重量(放在同一侧),问能称出多少种不同的重量。

注:
称重重量包括0

输入描述:
输入包含多组测试数据。
对于每组测试数据:
第一行:n — 砝码数(范围[1,10])
第二行:m1 m2 m3 … mn — 每个砝码的重量(范围[1,2000])
第三行:x1 x2 x3 … xn — 每个砝码的数量(范围[1,6])

输出描述:
利用给定的砝码可以称出的不同的重量数

示例1
输入
2
1 2
2 1

输出
5

更新
看到这个问题,如果没有思路,那纠结的点可能是,那么多种组合,可能某种组合A和某种组合B,结果重量和是一样的,我们要怎样组合,怎样统计,才能算出有多少不同的重量和?

简化并转化问题,变为:如果已知一部分结果,接下来如何处理新的变化?即如果我知道了已有的重量组合的值(假设为{n1,n2,n3})了, 再来一个重量weight的砝码,能获得多少重量组合?

答案很简单,依次对原始的重量进行n1+weight,n2+weight, n3+weight。 看一下这些重量在不在{n1,n2,n3}这个集合里,没在就加进去。

那如果重量为weight的砝码有number个呢?那我就依次对原始的加一个weight, 更新重量set,加2个weight, 更新重量集合。直到增加number个。

上面描述了处理一种重量的砝码的过程, 解题时我们拓展为处理多种砝码的过程。若有kind种砝码,重复kind次上面的过程即可。
代码及注释(python3)

def func():
    try:
        kind = int(input())  # 砝码的种类
        weights = [int(x) for x in 
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值