有n个框,编号为1-n。每个盒子都被锁定,因此只能通过一种相应类型的钥匙(也编号为1-n)打开它。这些密钥随机散布在框中(一个盒子可以具有任意数量的密钥,一个密钥可以具有任意数量的重复项),然后关闭所有盒子。许多盒子中也锁着一个宝物(编号0)。
您已雇了一个锁匠来取回所有宝藏。他为打开的每个盒子收费。打开一个已经有钥匙的盒子是免费的。
输入是每个框的内容。您可以决定输入的格式。
输出获得宝藏所需的最低成本。
笔记
- 您的算法可能会花费很长时间,但这无关紧要。
- 最短的代码获胜。
- 无需担心无效输入。
样本数据
第i行代表框i中显示的键。
输入值
2 0
3
4 0
5 6 0
6
0
输出量
1
输入值
2 0
3 0
4 0
6
5 0
输出量
3
输入值
2 4 0
3 0
1 0
6
5 0
输出量
2
输入值
1
3 4
2 6
5
输出量
0
2
这也许与此有关吗?
—
艾迪生·克伦普
@VoteToClose不错的视频。相似之处在于它只讨论数学难题和特定算法,而不是通用算法。
—
ghosts_in_the_code 2015年
这似乎与这个有关100个锁着的箱子的木头和钢铁的难题有关:puzzling.stackexchange.com/q/17852/4551
—
xnor
@ghosts_in_the_code不是简单,而是灵活性。通常,只要不对数据进行预处理,就需要结构化输入的挑战允许使用任何方便的列表格式。根据语言的不同,可能意味着像您一样使用空格分隔文件,或者可能意味着
—
Martin Ender 2015年
[[1] [3 4] [] [] [2 6] [5]]
或{{1},{3,4},{},{},{2,6},{5}}
。这样,大多数语言都可以将输入的读物减少到微不足道的程度,i=eval(read())
并专注于挑战的有趣部分。