我在算法课上有一个家庭作业问题:
你有一个游戏板和一条通往终点的路。你一步一步地
时间。在每一个“位置”你都会走到一堆牌(A
标准52卡组的子集)。可能有1张牌,2张牌,
3张卡片等。没有重复,至少有一张卡片。
这个游戏的目的是在每个位置选一张牌。你
不能选择同一张卡两次当你到达终点时,
你希望卡片的总面值最小。
设计一个算法,在给定有多少个位置,以及每个位置有多少张牌的情况下,找到要拾取的牌的最小组合。
我真的不知道从哪里开始我可以做一个详尽的搜索,但我担心这不够有效。我知道这并不是简单的在每个位置选最小的牌。因为你不能两次选择同一张卡,你可能会遇到这样一种情况:最初选择价值稍高的卡,然后在后期选择更便宜的卡我考虑创建一个“决策树”,但这也不利于时间复杂度。
最佳答案
使用回溯查找所有可能的路径,然后选择产生最小值的路径。
您可以使用两个(可能更多)规则预处理数据:
如果路径中的一个卡栈中有一张其他卡栈都没有的卡,则可以将该堆栈中的卡缩减为唯一的卡。
如果路径中的任何堆栈只有一张卡,则可以从其他堆栈中移除所有类似的卡。
你仍然在看一个最坏的情况大约52如果这条路很长。
关于algorithm - 最短路径:拿起没有重复的卡片,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36165905/