# -*-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)