蓝桥云课——砝码称重 Python(set集合)

 

题目地址:砝码称重

此题好像可以用两种方法做,但这里只讲第一种常规方法(因为动态规划方法太难了):

        看到此题我们首先想到的必然是怎么将其暴力求出来,首先我们先将其一个一个的放在天平上,但砝码重量难免有相同的,所以我们先设置一个set数组并添加重量0:

ans = set()
set.add(0)

        但是要将多个砝码放在两个天平之中方法有很多,但是在砝码依次相加的过程中肯定会超时的,所以我们不妨设立一个process数组用来保存我们中途添加的砝码重量:

process = [0]

        对于两端的天平无非就是砝码重量加减的问题,所以我们可以用两个if语句来判断其是否在数组ans里。

完整代码:

n = int(input())
weights = list(map(int, input().split()))
ans = set()
set.add(0)
process = [0]

for weight in weights:
    for i in range(len(process)):
        if weight + process[i] not in ans:  # 砝码重量相加
            ans.add(weight + process[i])
            process.append(weight + procecss[i])

        if abs(weight - process[i]) not in ans:  # 砝码重量相减
            ans.add(abs(weight - process[i]))
            process.append(abs(weight - procecss[i]))

print(len(ans) - 1)  # 去掉重量0

        对于process数组的使用是此方法比较难以理解的,随着第一个for循环的运行,process内部会不断的添加已经使用过的砝码重量,第二个for循环的运行会不断的加或减我们曾经使用过的砝码重量,从而实现在两天平上添加砝码这一操作。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值