Codeforces 30D King‘s Problem?

题意

x轴上有n个点,轴外有一个点n+1,问从k点出发遍历全部的最短路径。

题解

首先特判一下k==n+1,这里很简单不赘述。

当1≤k≤n时,我们先不考虑出发点,先看看遍历全部点的可能最短路径。

首先将x轴上的点排序,然后将其切分为A、B两个部分,当A、B都不为空集时,有路径:

Amin→Amax→n+1→Bmin→Bmax

Amin→Amax→n+1→Bmax→Bmin

Amax→Amin→n+1→Bmin→Bmax

Amax→Amin→n+1→Bmax→Bmin

其中Bmin=Amax+1。

当A为空集或B为空集时,有路径:

1→n→n+1

n→1→n+1

我们尝试将k点挪到上述路径的起点或终点,然后计算min{k点挪动的距离+路径本身的长度}。

不会证明,反正直觉上是这样的。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值