題意:
演算法導論上的一道習題,給出一系列點的的座標,現在從最左端出發,到達最右端的點,再返回原點,要求遍歷所有點並且路程最短。
要點:出發又返回可以看成兩個人同時從左往右走,其中乙個人走的快乙個人走的慢。重點是因為乙個點只能走一次,所以可以想出最優子結構,假設現在用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,則這個點在腫...