poj 3311 狀態壓縮dp

2021-06-25 19:20:50 字數 1103 閱讀 7570

【題目大意】
類似於tsp問題,只是每個點可以走多次,比經典tsp問題不同的是要先用弗洛伊的預處理一下兩兩之間的距離。        求最短距離。
【解析】
可以用全排列做,求出乙個最短的距離即可。或者用狀態壓縮dp.用乙個二進位制數表示城市是否走過
【狀態表示】
dp[state][i]表示到達i點狀態為state的最短距離
【狀態轉移方程】
dp[state][i] =min dis[j][i]為j到i的最短距離
【dp邊界條件】
dp[state][i] =dis[0][i]  state是只經過i的狀態

#include

#include

#include

#include

#include

#include

#include

#include

#define inf 11111111

using

namespace std;

int n,ans;

int dp[

13][

1<<

13];

int dis[

13][

13];

intmain()}

for(i =

0; i <= n; i++)}}

int s;

for(s =

0; s <=(1

<1; s++)}}

}}} ans = dp[

1][(

1<+ dis[1][

0];for(i =

2; i <= n; i++)

cout<}}

POJ 3311 旅行商問題 狀態壓縮 dp

最近做 dp 做的起勁啊。旅行商問題的狀態壓縮 dp i j 表示 遍歷 i 中所有城市一遍 並且現在在 j 的最短距離是多少。第乙個點可以遍歷兩次所以先不設定為1,並且這個狀態是合法狀態,這個點曾經是最困擾我的。include include include include include inc...

POJ 3311 佛洛依德列舉

題意 有 n 個地點,之後告訴你n個地點的之間的距離,問從起點出發,經過所有的點後再回到起點,求最短路。輸入 3 0 1 10 10 1 0 1 2 10 1 0 10 10 2 10 0 0 輸出 8 分析 tsp 旅行商 問題,可以先求出任意兩點之間的最短路g i j 直接三重迴圈的floyed...

3311 POJ 狀態壓縮

include include include include include include include include include include define ll int64 define lll unsigned long long define max 1000009 defin...