reference:
1)《演算法導論》15-3
2)將所有點按x座標從小到大排序後(假設不存在重複)。從左至右標記為0, 1, 2…n-1
那麼這問題的關鍵乙個性質是,對於一點i(i > 0)和任意包含它的雙調路徑,i-1一定是i的前繼或者後繼。
如果我們假設乙個環遊的順序,比如逆時針 f[
i][j
] (i>j)表示從i到0,再從0到j
1)如果i-1是在(i, 0)上,f[
i−1]
[j] 已經求出來了,再加上(i, i-1)就行了 那麼f
[i][
j]=f
[i−1
][j]
+dis
t[i−
1][i
] 2)如果i-1在(0, j)上,則j=i-1,否則不滿足性質。 所以f
[i][
i−1]
=min
(f[i
−1][
k]+d
ist[
k][i
]),0
<=
k1 (求最短的情況)
這意味著i向左走遇到的第乙個點是k,然後走(k, 0),(0, i-1),這段路徑就是f[
i−1]
[k]
例題:
poj 2677
雙調歐幾里得旅行商問題 《演算法導論》
題目描述 給定平面上n個點作為輸入,要求從最左端的點開始,嚴格向右前進,直到最右端的點,再嚴格向左前進到第乙個點,每乙個點只能經過一次。主演算法 d i,j 表示兩個人第乙個點出發沿著不同的路徑分別走到i,j 並且經過1 max i,j 的所有點到達終點還需要的距離。di st i j 表示i,j ...
演算法導論 15 1 雙調歐幾里得旅行商問題
先做以下定義 對所有點按x座標排序,從0開始依次為每個點編號,令 1 兩條路徑分別為a和b,且起點都是點0,方向嚴格向右 2 a i 表示路徑a的一種狀態,起點為點0,終點為點i,方向嚴格向右,0 i 3 b j 表示路徑b的一種狀態,起點為點0,終點為點i,方向嚴格向右,0 j 4 d i j 為...
雙調旅行商問題
poj2677,先對x排序,但這題已經排好序的了 dp i j 表示從點i開始往左直到最左邊的點,然後再從左往右到j點且經過所有i左邊的點所走的距離 include include include include using namespace std define ll long long def...