UVa 1347 雙線程DP Tour

2022-05-22 10:36:08 字數 868 閱讀 3931

題意:

平面上有n個座標均為正數的點,按照x座標從小到大一次給出。求一條最短路線,從最左邊的點出發到最右邊的點,再回到最左邊的點。除了第乙個和最右乙個點其他點恰好只經過一次。

分析:可以等效為兩個人從第乙個點出發,沿不同的路徑走到最右點。

d(i, j)表示點1~max(i, j)這些點全部都走過,而且兩人的位置分別是i和j,最少還需要走多長的距離。由這個定義可知,d(i, j) == d(j, i),所以我們再加乙個條件,d(i, j)中i>j

這樣狀態d(i, j)只能轉移到d(i+1, j)和d(i+1, i)

邊界:d(n-1, j) = dist(n-1, n) + dist(j, n) (1 ≤ j < n-1)

最終所求答案就是dist(1, 2) + d(1, 2)

1

//#define local

2 #include 3 #include 4 #include 5 #include 6

using

namespace

std;78

const

int maxn = 1000 + 10;9

double

x[maxn], y[maxn], dp[maxn][maxn], dis[maxn][maxn];

1011

double dist(int a, int

b)12

1516

int main(void)17

35 printf("

%.2lf\n

", dis[1][2] + dp[2][1

]);36}37

38return0;

39 }

**君

歐幾里得旅行商問題uva1347

題意 自見紫書 題解 這道題啊,我發誓我是聽過的,但是我忘了,然後自己盯著這道題想了好久,也沒想出來 dp這東西,定義狀態是非常重要的啊,發現自己對這道題的狀態完全下不去手 有兩種分析思路 第一種是,設f i j 表示前i個點已經訪問過,落後的人在j時經過的最小路程 這是已經把來回看做兩個人 規定i...

UVA 1347 Tour 雙調旅行商

題意 平面上有n個點。乙個人要從左上角的點向右走,到右下角的點,然後再回到左上角的點。現在想讓這個人每個點到達一次,且走的總路程的距離最小。求出最小的距離。思路 雙調旅行商問題。因為起點和中途點已知,我們可以把這個問題轉化成兩個人從左上角出發,分別不重複的到達其他點,最後在右下角的點匯合。可以注意到...

HDU 2686 雙線程 Matrix

這也是當初卡了很久的一道題 題意 從左上角的格仔出發選一條路徑到右上角然後再回到左上角,而且兩條路徑除了起點和終點不能有重合的點。問所經過的格仔中的最大和是多少 狀態設計 我們可以認為是從左上角出發了兩條路徑,然後同時到達右下角。容易看出,第k個階段所有可能到達的格仔構成一條斜線而且滿足x1 y1 ...