Algorithm 动态规划-两个间谍在河边
我认为这是一个非常复杂的动态规划问题 两名间谍在[1..m]中各有一个秘密号码。为了交换号码,他们同意在河边见面,并无辜地轮流扔石头:从一堆n=26个相同的石头中,每个间谍轮流向河里扔至少一块石头 唯一的信息是每个回合投掷的石头数量。最大的m是多少,这样他们就可以确定他们可以完成交换 开发一个递归计算公式。这是表格的开头;将其填写为n=26。你不应该期望一个封闭的表单Algorithm 动态规划-两个间谍在河边,algorithm,recursion,dynamic-programming,Algorithm,Recursion,Dynamic Programming,我认为这是一个非常复杂的动态规划问题 两名间谍在[1..m]中各有一个秘密号码。为了交换号码,他们同意在河边见面,并无辜地轮流扔石头:从一堆n=26个相同的石头中,每个间谍轮流向河里扔至少一块石头 唯一的信息是每个回合投掷的石头数量。最大的m是多少,这样他们就可以确定他们可以完成交换 开发一个递归计算公式。这是表格的开头;将其填写为n=26。你不应该期望一个封闭的表单 n 1 2 3 4 5 6 7 8 9 10 11 12 m 1 1 1 2 2 3 4 6 8 12 16 23 我们的教
n 1 2 3 4 5 6 7 8 9 10 11 12
m 1 1 1 2 2 3 4 6 8 12 16 23
我们的教授给了我们一些提示:我建议将问题改为下表:让Rn,m为数字[1..Rn,m]的范围,如果它们以n个石头开头,A可以向B表示,并且都知道A也必须从B接收[1..m]中的数字
例如,如果A不需要更多的信息,Rn,1可以通过考虑A可以扔多少石头来计算,然后B认为1如果还有,A可以再次决定。基本情况是R0,1=R1,1=1,如果小心边界,可以编写递归规则。你应该找到Rn,1的斐波那契数
如果A需要信息,那么B必须通过他或她的选择发送信息,所以事情就稍微复杂一些。以下是表格的开头:
n\ m 1 2 3 4 5
0 1 0 0 0 0
1 1 0 0 0 0
2 2 0 0 0 0
3 3 1 0 0 0
4 5 2 1 0 0
5 8 4 2 1 1
6 13 7 4 3 2
7 21 12 8 6 4
8 34 20 15 11 8
9 55 33 27 19 16
从Rn,m表中,如何恢复前面表中的条目?该表显示m是n的函数?我不太理解这个问题。要传达给另一个间谍的秘密号码是扔到河里的石头总数?@Codor根据我的理解,这个秘密号码是由扔石头的顺序表示的。考虑间谍有3块石头。他可以:在第一个回合中投三个3-0-0,或一个,然后投两个1-2-0或1-1-1或2-1-0。用三块石头,他可以交换1到4之间的数字。请放大你的例子。哪个选项对应于要提交的数字?@Codor,编码没有定义,但您可以使用字典顺序将抛出序列与数字进行映射:1-1-1=>1,1-2-0=>2,2-1-0=>3,3-0-0。这只是一个例子,我们的间谍可以选择他们想要的任何东西:@Rerito扔石头根本不允许另一个神秘贩子继续,这可能就是为什么n=3的m被引用为1而不是4。