本文始发于个人公众号:TechFlow
最近看到一道很有意思的问题,分享给大家。
还是老规矩,在我们聊算法问题之前,先来看一个故事。
传说中,有5个海盗组成了一支无敌的海盗舰队,他们在最后一次的寻宝当中找寻到了100枚价值连城的金币。于是,很自然的,这群海盗面临分赃的问题。为了防止海盗内讧,残忍的海盗们制定了一个奇怪的规则:
他们决定按照功劳大小对五个人进行编号,由编号小的海盗先提出分配方案。如果方案能够得到大多数人的同意,那么就按照他提出的方案进行分配。如果不能通过,说明他已经失去了威望,海盗们会残忍地将他投入海中喂鲨鱼。
在一个朦胧的早上你一觉醒来,突然发现自己成了一号海盗,那么你应该如何分配才能获得最多的金币,又不会被喂鲨鱼呢?
在我们思考之前,我们先完善一下题意,增加几个条件。
首先,每一个海盗都非常残忍。这意味着,在不影响收益的情况下,他们会更倾向于杀人。
其次,每一个海盗都极其聪明,都能想到最佳答案。
这两个条件一出来,问题就比较明显了,这是博弈论题目才有的架势。
既然这是一道博弈论的问题,那么我们通过常规的思路是无法找到答案的,我们需要另辟蹊径才行。
那么,怎么另辟蹊径呢?
一个比较常规的做法是先不考虑原问题,先假设一个和原问题差不多,但是规模小很多的子问题。通过对子问题的求解来摸索原问题的解法。
举个例子,在这题当中,我们需要计算5