池塘里有n片荷叶,围成了一个凸多边形。荷叶的编号分别为1,2,3,。。n,n<=1000, 求一种青蛙的跳跃策略,使得青蛙跳过的距离最短,并且遍历了所有的荷叶
分析:最短距离并非遍历凸多边形的所有的边。例如:A(2 3),B(6 3),C(4 1),D(1 1),四个点组成的凸多边形,最短的遍历路径为ADBC,经过了对角线DB。
使用动态规划解这道题目。子问题为每个节点周围节点数目为1,2,3,..,时候的问题,在解题的过程中,不断的扩大每个节点周围的节点数目。
f(s,L,0)表示从s开始,经过L个顶点的最短距离
f(s,L,1)表示从s+L-1开始,经过L个顶点的最短距离
则 f(s,L,0)=min(f(s+1,L-1,0)+dis(s,s+1), f(s+1,L-1,1)+dis(s,s+L-1));
f(s,L,1)=min(f(s,L-1,1)+dis(s+L-1,s+L-2), f(s,L-1,0)+dis(s,s+L-1));
f[s,1,0]=0;
f[s,1,1]=0;