hdu 4568 旅行商問題dp

2021-07-11 03:43:09 字數 1295 閱讀 7239

這個題目題意描述不清,沒有說明只能進入一次。

題目意思很好理解,不再重複。

思路也比較好想,先計算每兩個寶藏區的最短路,和每個寶藏區到邊界的最短路,然後dp解決。

在計算最短路的時候,用優先佇列優化的dijkstra演算法。

在-1的處理上有些小技巧。

但是!但是!!,我之前的思路是dp[i]表示狀態i的最小cost值,並沒有經過嚴格證明和認真思考導致wa好多次。實際上這個思路在計算過程中會導致資訊丟失,下次動鍵盤前一定要證明一下。。

正確的狀態轉移應該是用dp[i][j]表示狀態i並以第j個寶藏結尾的最小cost,這樣每一步計算就儲存了足夠多的資訊了。

話說這就是所謂的旅行商問題了。

#include#include

#include

using

namespace

std;

int data[202][202

];int min_d[14][14],tmp_d[202][202

];int out_d[14],k,x[14],y[14

];int gold[202][202

];int

t,n,m;

const

int mx[4]=,my[4]=;

const

int inf = 1000000

;structd};

bool

operator

<(d a,d b)

void

cal_min_d_out_d() }}

}}int

main()

scanf("%d

",&k);

memset(gold,

0,sizeof

(gold));

for(int i=0;i)

gold[x[i]][y[i]]=i+1

; }

cal_min_d_out_d();

int dp[1

<1

];

for(int i=0;i<(1

<)

for(int j=0;j)

dp[i][j]=inf;

for(int i=0;i)

}for(int i=3;i<(1

<) }}

}int ans=inf;

for(int i=0;i1

<1

)][i],ans);

printf(

"%d\n

",ans);

}}

旅行商問題

旅行商問題 乙個商人從城市a出發,訪問bcde等城市各一次最後回到a,問行程如何使得路程或費用最低。這是個np 非多項式可解,但一般驗證容易 問題,假設中間有4個城市,那麼全排列為4!24種,沒有很好的演算法,基本只能窮舉了。class vertex 4 public class lianxi pu...

旅行商問題

一銷售商從n個城市中的某一城市出發,不重複地走完其餘n 1個城市並回到原出發點,在所有可能的路徑中求出路徑長度最短的一條。本題假定該旅行商從第1個城市出發。對每個測試例,第1行有兩個整數 n 4 n 10 和m 4 m 20 n是結點數,m是邊數。接下來m行,描述邊的關係,每行3個整數 i,j le...

旅行商問題

題意 旅行商問題,即從 1 走到 n 不重不漏,然後求最小距離。題解 狀態壓縮dp,顯然的是,要從某種狀態到某種狀態並且合法,然後取 min 然後全部遍歷。所以設 dp 的含義是,最後乙個點是 i 點,然後走過了 j 這個 01 串的有 1 的點。然後要想的是順序問題,那麼我們必然是從上乙個點推到 ...