是个传颂厨

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
# -*-coding:utf-8-*-
w = [1, 2]
n = [2, 1]
sum_w = 0
for i in xrange(len(n)):#弄出最大质量
    sum_w += n[i]*w[i]
S = set([])#创建集合,自动消去重复元素
S.add(sum_w)
for j in xrange(len(n)):
    temp = S.copy()#拷贝对象
    for k in temp:
        t = 1
        while t <= n[j]:
            S.add(k - t*w[j])
            t += 1
print len(S)

刚刚开始完全不记得用set,然后手动排序消除重复元素,看了大神的代码之后简直茅厕顿开。。。

不过这个方法会判断重复,并不优雅

题在下面:

有一组砝码,重量互不相等,分别为m1、m2、m3……mn;它们可取的最大数量分别为x1、x2、x3……xn。 
现要用这些砝码去称物体的重量,问能称出多少种不同的重量。 
现在给你两个正整数列表w和n, 列表w中的第i个元素w[i]表示第i个砝码的重量,列表n的第
i个元素n[i]表示砝码i的最大数量。i从0开始,请你输出不同重量的种数。
如:w=[1,2], n=[2,1], 则输出5(分析:共有五种重量:0,1,2,3,4)


posted on 2016-04-14 10:01  是个传颂厨  阅读(248)  评论(0编辑  收藏  举报