zoukankan      html  css  js  c++  java
  • ICPC题目选讲

    Traveling in the grid world

    题目描述

    有一个 (n imes m) 的格点图,两点之间走他们的连线,但是这条连线不能恰好覆盖其他整点。还要求相邻两步之间的连线不能斜率相同,求从 ((0,0)) 走到 ((n,m)) 的最短距离。

    (1leq n,mleq 10^6)

    解法

    首先考虑一种特殊情形:(gcd(n,m)=1) ,就说明起点到终点的连线就是答案。

    从大体上看,由于走的是直线,所以我们希望折线的次数越少越好(有点感性)。我们考虑只折一次的最优解是什么,可以画图分析:

    在这里插入图片描述

    假设在 (A,B) 的路径中的拐点是 (C) ,那么如果 (AC) 之间出现了一个整点 (D) 怎么办呢?我们发现由于三角形两边之和大于第三边,此时选 (D) 做为拐点一定最优,那么一直这样调整。如果 (C) 是最短路径的一个拐点,那么他一定是满足条件的,所以最短即合法(BC) 段可以用类似的方法来调整,最后的状态一定两边都没有整点。

    那么我们如何说明最优解是只折一次呢?假设多段折线最优,可以取多段折线第一段作为 (AC) 段,然后连接 (BC) ,总长度一定是比多段折线要小的。如果不合法呢?那调整会得到更小的结果,所以与我们的假设矛盾,反证法证明成功。

  • 相关阅读:
    处理不均衡数据 (Imbalanced data)
    过拟合 (Overfitting)
    加速神经网络训练 (Speed Up Training)
    Python3 S.join() 个人笔记
    OpenCV中的图像形态学转换
    OpenCV中的绘图函数
    OpenCV中图像的BGR格式及Img对象的属性说明
    OpenCV中图像的读取,显示与保存
    msyql-02
    jumpserver的快速部署
  • 原文地址:https://www.cnblogs.com/C202044zxy/p/14243460.html
Copyright © 2011-2022 走看看