二进制状态压缩DP
描述
給定一張 n 個點的帶權(quán)無向圖,點從 0~n-1 標(biāo)號,求起點 0 到終點 n-1 的最短Hamilton路徑。 Hamilton路徑的定義是從 0 到 n-1 不重不漏地經(jīng)過每個點恰好一次。
輸入格式
第一行輸入整數(shù)n。
接下來n行每行n個整數(shù),其中第i行第j個整數(shù)表示點i到j(luò)的距離(記為a[i,j])。
對于任意的x,y,z,數(shù)據(jù)保證 a[x,x]=0,a[x,y]=a[y,x] 并且 a[x,y]+a[y,z]>=a[x,z]。
輸出格式
輸出一個整數(shù),表示最短Hamilton路徑的長度。
數(shù)據(jù)范圍
1≤n≤20
0≤a[i,j]≤107
輸入樣例:
5
0 2 4 5 1
2 0 6 5 3
4 6 0 8 3
5 5 8 0 5
1 3 3 5 0
輸出樣例:
18
一看到這道題目的時后我們一眼就覺得這是一道搜索題,但是我們仔細(xì)分析一下時間復(fù)雜度:
頭尾都是確定的,因此我們要對中間的(n - 2)個數(shù)進行全排列,大概就是(n - 2)!次方次排列,于是我們自然而然的就想到了用DP來絕決這個問題,但是用DP我們又該怎么樣來表示這之間的狀態(tài)呢。
每一個位置我們用0,1,來表示。0代表沒走過,1代表已近走過,
由此我們就有了狀態(tài)轉(zhuǎn)移方程。
DP[A][j] = min(DP[A][j], DP[B][k] + value[k][j])
其中A、B,分別時兩個集合。B集合加上點 j 等于A集合。
每個狀態(tài)用其第幾位的二進制是0或者1來表示
我們有了下面的代碼
總結(jié)
- 上一篇: 杏花粉的功效与作用、禁忌和食用方法
- 下一篇: 陈年陈皮的功效与作用、禁忌和食用方法