Posts pythonTip 45 砝码问题
Post
Cancel

pythonTip 45 砝码问题

题目描述: 有一组砝码,重量互不相等,分别为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)

示例:

输入:w = [1, 2] n = [2, 1] 输出:5

分析: 因为没有看到给定的数据范围,所以我就假设数据量比较大,开始解决办法,然后想啊想,想啊想,没有想到办法。所以我就干脆一点了,看了一下题解,当我看到暴力 二字的时候,我就明白了,暴力出奇迹(ps: 大力出奇迹)

类似于 dfs, 家传暴力,不过我还是调试了很久,主要是很长时间没有写代码了,手生疏了。 对于一些变量的把握很模糊,这也说明,我以前学的不怎么好,对于一些细节的思考还不够到位。

我在这里使用 集合去保存生成的数,以此去解决重复元素的问题。

代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
ans = set()
len_n = len(w)

def dfs(pos, value):
    if pos >= len_n:
        ans.add(value)
        return
    
    for i in range(n[pos]+1):
        dfs(pos+1, value+i*w[pos])

dfs(0, 0)
print(len(ans))
This post is licensed under CC BY 4.0 by the author.
Trending Tags
Contents

pythonTip 44 超级楼梯

pythonTip 46 取石子游戏

Trending Tags