我的算法课中有一个作业问题,询问以下内容:
你有一个游戏板和一条通往终点的道路。你走了一步 时间。在每个“位置”,你走到那里有一堆卡片(a 标准52卡片组的子集)。可能有1张卡,2张卡, 3张卡等没有重复,并且至少有一张卡。
游戏的目的是在每个位置挑选一张牌。 您 无法选择同一张卡两次。当你到达终点时, 你希望卡的总面值最小。
设计一种算法,根据有多少位置,以及每个位置的卡片组,找到最小的卡片组合。
我真的不知道从哪里开始。我可以进行详尽的搜索,但我担心这样做不够有效。我知道这并不像在每个位置挑选最小的卡片那么简单。由于您不能两次选择相同的卡,您可能会遇到这样的情况:最初选择价值稍高的卡,然后在后期更便宜。我考虑过创建一个“决策树”,但这对时间复杂度也无济于事。
答案 0 :(得分:0)
使用回溯来查找所有可能的路径,然后选择产生最小值的路径。
您可以使用两个(可能更多)规则预处理数据:
如果路径中的一叠卡片中没有其他堆叠卡片,您可以将该堆叠中的卡片缩减为唯一卡片。
如果路径中的任何堆栈只有一张卡,您可以从其他堆栈中删除所有类似的卡。
你还在看着大约52岁的最坏情况!如果路径很长。