nessunsweet 发表于 2014-02-20 14:15

砝码问题

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


m = set()
for i in range(n+1):
    m.add(w*i)
for i in range(1,len(n)):
    tmp = m.copy()
    m.clear()
    for j in range(n+1):
      for k in tmp:
            m.add(w*j+k)
print len(m)

程序段的思路我搞不清楚,麻烦大家指教下~~

timespace 发表于 2014-02-20 15:14

思路都差不多:找出n中所有对应砝码的数量组合,然后计算所有对应的重量与数量乘积的和,最后去重,完事。
实现么,大同小异,忍不住写了一行代码。>>> from itertools import product
>>> w =
>>> n =
>>> set(sum(x*y for x,y in zip(w, e)) for e in product(*))
{0, 1, 2, 3, 4}

q1208c 发表于 2014-02-20 15:27

回复 1# nessunsweet
就是一个集合呀.


   
页: [1]
查看完整版本: 砝码问题