第一次狀壓DP 售貨員問題

2021-06-27 05:22:04 字數 550 閱讀 2857

嘛····tsp問題,模擬退火感覺好複雜。。。於是就各種找狀壓dp的**,經過個人修改與綜合,現加如下修改注釋版本。。。

另,狀壓dp如果狀態太多 可能會mle```

/*用 f [ i ] [ s ] 表示當前到達 i 號點,狀態為 s 的最短路,

最終我們只需在所有的 f [ i ] [ all ] + map [ i ] [ 1 ] 中找乙個最大值即可,

all為全為1的01序列,用0表示沒走過,1表示走過

那麼比如狀態s=111,就可以從1號點110,或2號點101,或3號點011走來,這樣轉移方程就出來了

f [ i ] [ s ] = m i n ( f [ i ] [ s ] , f [ j ] [ s & ( ~ ( 1 < < i ) ) ] ) ;

*/#include #include #define inf 0x3f3f3f3f

int n;

int mpt[20][20];

int dp[20][1<<15];

int min(int a,int b)

{ return a

狀壓DP 售貨員的難題

某鄉有nn個村莊 1輸入格式 村莊數nn和各村之間的路程 均是整數 輸出格式 最短的路程。輸入樣例 1 3 0 2 1 1 0 2 2 1 0輸出樣例 1 3dp i j 表示i狀態 i的二進位制表示第x位上是1 則 x 1 號村莊已被走過 以j 1號村莊作結的路程 所以最終答案為min dp 1 ...

codevs2596 售貨員的難題 狀壓dp

時間限制 1 s 空間限制 32000 kb 題目等級 鑽石 diamond 某鄉有n個村莊 1 輸入描述 input description 村莊數n和各村之間的路程 均是整數 輸出描述 output description 最短的路程 樣例輸入 sample input 30 2 1 1 0 2...

第一次接觸狀壓DP

另類的暴力 一般狀態數不多的時候就會開陣列,但是有的狀態並不好表示,於是,狀壓dp就產生了。狀壓dp應該是分兩類的,一類是壓縮狀態,另一類是捨棄狀態。我感覺初學狀壓dp難就難在二進位制運算的應用,了解二進位制運算子就顯得十分重要。所以我們先看下表,如果有不會二進位制簡單應用的神犇請忽略.下面就可以看...