青蛙的烦恼(dp好题)

有n片荷叶正好在一凸多边形顶点上
有一只小青蛙恰好站在1号荷叶的点
小青蛙可以从一片荷叶上跳到另外任意一片荷叶上
给出N个点的坐标N<800
求小青蛙想通过最短的路程遍历所有的荷叶一次且仅一次的最短路径。
 
这题如果没有凸多边形的性质,就是裸的TSP问题,数据范围没法做的很大,用dp做也最多做到n=20左右,即使用更高级的退火模拟算法也只能到40左右。
但是这题的点在凸多边形上,因此有下面的性质:
青蛙遍历的路径不会相交。
证明很简单,画个图,利用三角形两边之和大于第三边即可。
 
结论:青蛙在1号结点只能跳到2号结点或者n号结点。
如果青蛙跳到了2号结点,则问题转化为:从2出发,遍历2..n一次仅一次的最短距离。
如果青蛙跳到了n号结点,则问题转化为:从n出发,遍历2..n一次仅一次的最短距离。
这实际上是递归的思维,把问题转化为了本质相同但规模更小的子问题;
F(s,L,0)表示从s出发,遍历s..s+L-1一次且仅一次的最短距离;
F(s, L,1)表示从s+L-1出发,遍历s..s+L-1一次且仅一次的最短距离。状态转移方程为:
F[s][L][0]=min{F[s+1][L-1][0]+dist[s][s+1],F[s+L-1][L-1][1]+dist[s][s+L-1]};
F[s][L][1]=min{F[s][L-1][1]+dist[s+L-1][S+L-2],F[s][L-1][0]+dist[s][s+L-1]};
 
 

转载于:https://www.cnblogs.com/vb4896/p/3895845.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值