这是一种游戏,其中卡1-50被分发给两个玩家,每个玩家具有10个随机顺序的卡。目标是对所有卡片进行排序,并且首先执行该卡片的人是赢家。每次有人可以从卡座上取卡,他必须更换现有的卡。玩家不能交换他的牌。也就是说,只有他可以用卡片从卡片上取代他的卡片。丢弃的卡片将以随机顺序返回卡片。现在我需要编写一个有效地执行此操作的程序。
我想到了以下解决方案 1)找到给定卡片组中按升序排列的所有子序列 2)对于每个子序列,基于可以解决问题的方法的概率来计算权重。 例如:如果我有一个子序列48,49,50在索引2,3,4完成问题的概率是这个子序列是0.所以权重乘以0。 同样地,如果我在索引3,4,5处有序列18,20,30那么完成游戏的可能方式就是没有20种可能的牌可供选择6-10和17种可能的牌来选择前2个位置, 3)对于来自牌组的每张牌,我将扫描列表并重新计算子牌的重量以找到更合适的牌。
嗯,这个解决方案可能有很多缺陷,但我想知道 1)给定一个子序列,如何找到完成游戏的可能方式的概率? 2)找到所有子序列的最佳算法是什么?
答案 0 :(得分:2)
因此,如果我理解正确,目标是通过交换尽可能少的卡来获得有序的手,对吧?你尝试过以下方法吗?这是非常简单的,但我猜它有相当不错的表现。
N=50
I=10
while hand is not ordered:
get a card from the deck
v = value of the card
put card in position round(v/N*I)