洛谷 P1171 售貨員的難題(狀壓dp)

2022-02-13 11:22:39 字數 501 閱讀 5660

用乙個數i的二進位制表示某一位的村莊是否已經去過,dp[i][j]表示當前狀態i,這一次去的村莊是j的最短路程。

然後就列舉i、j、k(k表示下乙個去的村莊),然後在if判斷是否符合條件後,用dp[i][j]更新dp[i|1<<(k-1)][k]。

注意邊界的處理。

1 #include2

using

namespace

std;

3int n,m[25][25],dp[1048579][25],ans=0x3f3f3f3f;4

intmain()11}

12 dp[1][1]=0;13

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

<1;i++)21}

22}23}

24for(int i=1;i<=n;i++) ans=min(ans,dp[(1

<1][i]+m[i][1

]);25 cout26return0;

27 }

洛谷 P1171 售貨員的難題 狀壓dp

某鄉有n個村莊 1 輸入格式 村莊數n和各村之間的路程 均是整數 輸出格式 最短的路程。輸入樣例 1 複製3 0 2 1 1 0 2 2 1 0 輸出樣例 1 複製3 輸入解釋 3 0 2 1 1 0 2 2 1 0 這道題卡常卡的太極限了 include include include inclu...

洛谷P1171 售貨員的難題 狀壓DP

題目描述 某鄉有n個村莊 1 201 120 有乙個售貨員,他要到各個村莊去售貨,各村莊之間的路程s 0 s 1000 s 0s 0 s 10 00 是已知的,且a村到b村與b村到a村的路大多不同。為了提高效率,他從商店出發到每個村莊一次,然後返回商店所在的村,假設商店所在的村莊為1,他不知道選擇什...

洛谷P1171 售貨員的難題(狀壓DP)

題目描述 某鄉有n個村莊 1分析 n很小,而且哪個村去過與沒去過都可以用二進位制1,0表示,於是容易想到狀壓dp。接下來分析狀態。首先有2n種方案,所有dp狀態中要有一維 1 include include includeusing namespace std typedef long long l...