嘛····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難就難在二進位制運算的應用,了解二進位制運算子就顯得十分重要。所以我們先看下表,如果有不會二進位制簡單應用的神犇請忽略.下面就可以看...