POJ2677 Tour(DP 雙調巡遊)

2021-07-16 05:59:19 字數 1038 閱讀 1231

題意:

演算法導論上的一道習題,給出一系列點的的座標,現在從最左端出發,到達最右端的點,再返回原點,要求遍歷所有點並且路程最短。

要點:出發又返回可以看成兩個人同時從左往右走,其中乙個人走的快乙個人走的慢。重點是因為乙個點只能走一次,所以可以想出最優子結構,假設現在用dp[i][j]表示兩個人分別走到點i和j的最短路徑,下一步是走到i+1這個點,那麼可能是位置為i的人走到,又或者是位置為j的人走到。可以寫出狀態轉移方程:

dp[i + 1][i] = min(dp[i + 1][i], dp[i][j] + dis[i + 1][j]);i+1分配給位置為j的人

dp[i + 1][j] = min(dp[i + 1][j], dp[i][j] + dis[i][i + 1]);i+1分配給位置為i的人

我們最後要求的dp[n][n]一定是從dp[n][n-1]而來的,所以最後直接dp[n][n-1]+dis[n-1][n]就是答案。下面兩個圖可以方便理解。我寫的時候用memset直接陣列賦值,非常容易出錯。

dp[i][j] = 0xffffff;//直接用memset賦值就算是0x3f3f3f也不行

dp[1][0] = dis[1][0];//初始條件

for(i=0;i

POJ 2677 Tour 雙調旅行商

題意 給你 n 個二維座標上的點,你需要經過所有的點然後走回原地,求最短路徑。思路 我們先給所有的點按照 x 座標公升序排列,因為要走成環我們可以看成兩個人同時從第乙個點開始走,定義 dp i k 表示第乙個人走到第 i 個點第二個人走到第 k 個點的最短距離 走在前面的人是 i 對於任意乙個點i來...

雙調歐幾里得旅行商問題解法 POJ 2677

對於這個解法,網上題解一大堆。不過覺得還是算導官方給的解答好些,簡潔又清楚。大概總結一下 不是翻譯 首先是排序。然後確定狀態 f i j i j,i j表示的只有n這個點 表示 從i到1嚴格從右往左走然後再從1嚴格從左往右走到j 這樣兩條路徑的最小值,當然 1,max i,j 區間上所有的點都是被訪...

POJ 百煉 保研機試 2677 腫瘤檢測

總時間限制 1000ms 記憶體限制 65536kb 描述 一張ct掃瞄的灰度影象可以用乙個n n 0 n 100 的矩陣描述,矩陣上的每個點對應乙個灰度值 整數 其取值範圍是0 255。我們假設給定的影象中有且只有乙個腫瘤。在圖上監測腫瘤的方法如下 如果某個點對應的灰度值小於等於50,則這個點在腫...