如何解决以下问题的伪代码或逻辑是什么?最终的方法是找到动态编程解决方案
让P [1··m]和Q [1··n]是平面上的两个点序列。想象一下,用绳子相互连接的两只青蛙Pfrog和Qfrog想要一起遍历这些序列。最初,Pfrog在P 1,而Qfrog在Q 1。在每个步骤中,如果Pfrog在P [i]且Qfrog在Q [j],则它们可以以三种不同的方式进行:(A)Pfrog向前跳到P [i + 1],而Qfrog停留在Q [ j],(B)Qfrog向前跳到Q [j +1],而Pfrog停留在P [i],或(C)Pfrog和Qfrog一起向前跳到P [i + 1]和Q [j +1] , 分别。 (请注意,青蛙永远不会向后跳。)考虑一条长度为L的绳索。如果存在P和Q的穿越,使得Pfrog和Qfrog始终≤L,则说这条绳索很有用。您的工作是确定最小的有用整数绳索长度。 (因为更长的绳索要花更多的钱。)
图1:Pfrog和Qfrog的有效移动顺序为(P 1,Q 1)→(P [2],Q 1)→(P [3 ],Q 1)→(P [4],Q [2])→(P [5],Q [3])→(P [5],Q [4])→(P [5 ],Q [5])→(P [5],Q [6])。
解决方法
天真的重复只需要考虑O(|P| * |Q|)
个状态的先前可能状态:
f(1,1) ->
dist(P[1],Q[1]);
f(1,j) ->
max(f(1,j-1),dist(P[1],Q[j]));
f(i,1) ->
max(f(i-1,1),dist(P[i],Q[1]));
f(i,j) ->
max(
dist(P[i],Q[j]),min(
f(i-1,f(i,f(i-1,j)
)
).
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。