HDU 5067 狀態壓縮DP TSP

2021-09-09 01:17:39 字數 1234 閱讀 3297

題目鏈結

題目大意:藍翔挖掘機挖石子。把地圖上所有石子都運回起點,問最少耗時。

解題思路

首先得yy出來。

最少耗時肯定是從起點出發,把所有石子點走一遍且只走一遍,把石子裝在車上,然後最後回到起點。

由於石子堆最多也就10個。不難看出這就是個裸的tsp。

首先bfs計算出每個石子間的最短路。當時打bc的時候sb了,這題圖沒有障礙,直接根據座標算就行了。

然後進行tsp就行了。

起點的石子無所謂。所以tsp的起點就是(1,1)。

#include "

cstdio

"#include

"iostream

"#include

"cstring

"#include

"vector

"#include

"queue

"using

namespace

std;

#define inf 0x3f3f3f3f

int area[55][55],dp[1

<<15][15],vis[55][55],dis[55][55],dir[4][2]=,n,m,g;

struct

status

};int

bfs(status s,status e)

}}int

main()

for(int i=0;i)}}

int s=stone.size();

int cnt=1

int ans=inf;

for(int i=0;i)

ans=min(ans,dp[cnt-1][i]+dis[i][0

]); printf(

"%d\n

",ans);

memset(dp,

0,sizeof

(dp));

memset(dis,

0,sizeof

(dis));

}}

11906643

2014-10-18 22:12:42

accepted

5067

31ms

2200k

2159 b

c++physcal

hdu 5067 狀態壓縮dp

解題思路 這道題開始想複雜了,想用bfs去求出最短距離,其實沒必要,因為題目中沒有阻礙關係,所以可以兩點之間的最短距離可以用曼哈頓距離。剩下的就是乙個普通的tsp問題了,狀態壓縮dp include include include define inf 0x3f3f3f using namespac...

HDU 5067 狀態壓縮DP TSP

題意 有n m 的地圖,地圖上有一些石頭,現在需要用最短的時間去到達這些石頭,單位距離所花費的時間為1.思路 單單去看原題是具有迷惑性質的,講了很多亂七八糟的,所以在看題的時候需要抽象化問題,這道題因為清理石頭不花費時間,而費時間的是如何到達所有石頭才最快,也就是距離最短,經典的tsp問題,而石頭的...

hdu1074狀態壓縮

很明顯的狀態壓縮題目。當然了如果他的意識只有是求最小值沒有要求輸出那個輸出的順序,那麼直接用揹包,甚至是貪心都是可以做出來的,但是要求順序這個揹包的話沒有辦法吧資料記錄下來。所以用二進位制壓縮。所謂的二進位制壓縮就是用二進位制來表示事情的完成程度和狀況,比如1,就是0000001表示第乙個作業做了,...