历届真题 砝码称重【第十二届】Python题解

一、题目

在这里插入图片描述

二、代码

运用动态规划的思想,用f集合表示前i个砝码能够称出的重量集,每新加一个砝码,都对f进行更新,并且去重,减少遍历次数。
更新分为两部分:

  1. 放在同一边 则求和
  2. 放在不同边 则用abs()求差值
#放在两边
n = int(input())
wei = list(map(int, input().split()))
f = []
for i in range(0, n):
    for j in range(0, len(f)):
        f.append(f[j]+wei[i])
        f.append(abs(f[j]-wei[i]))
    f.append(wei[i])
    f = list(set(f))//去重
f = set(f)
f.discard(0)//0不算在重量集合内
print(len(f))

##
##f[i] 前i个砝码能够称出的重量集
##加入一个新的砝码i + 1后 f[i+1] =(f[0~len]+wei[i+1]) + abs(f[0~len]-wei[i+1])

结果

测试情况
能通过90%的样例,Python跑太慢了还有一个不知道咋优化了。。。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值