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

2021-06-20 22:35:28 字數 963 閱讀 1275

最近做 dp 做的起勁啊。。。

旅行商問題的狀態壓縮 dp[i][j] 表示 遍歷 i 中所有城市一遍 並且現在在 j 的最短距離是多少。

第乙個點可以遍歷兩次所以先不設定為1,並且這個狀態是合法狀態,這個點曾經是最困擾我的。

#include #include #include #include #include #include #include #include #include #include #include using namespace std;

#define read freopen("acm.in","r",stdin)

#define ll long long

#define pii pair#define pdi pair#define pdd pair#define mpi map::iterator

#define fst first

#define sec second

#define ms(x,d) memset(x,d,sizeof(x))

#define inf 0x3f3f3f3f

#define all(x) x.begin(),x.end()

#define lson l,m,rt<<1

#define rson m+1,r,rt<<1|1

#define max 500000

#define root 0,n-1,1

#define pb push_back

#define for(a,b,c) for(int a=b;adist[i][k]+dist[k][j])

dist[i][j]=dist[i][k]+dist[k][j];

}for(int i=0;i<(1<<12);i++)

for(int j=0;j<20;j++)

dp[i][j]=inf;

dp[0][0]=0;

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

狀壓dp POJ 3311 旅行商問題

題目大意 poj這題是變形 乙個送外賣的人,要將外賣全部送去所有地點再回到店裡,求最短路。店在0點。因為這裡可以重複經過每個地點。所以首先用floyd求出最短路,然後再進行dp即可 我看題解基本上都是遞推dp,我寫的記憶化搜尋。因為沒有刪除別人的變數定義,導致陣列開小,又debug了2個小時。遞推的...

旅行商問題 狀態壓縮

二進位制的很多應用離不開集合這個概念,我們都知道在計算機當中,所有資料都是以二進位制的形式儲存的。一般乙個int整形是4個位元組,也就是32位bit,我們通過這32位bit上0和1的組合可以表示多大21億個不同的數。如果我們把這32位bit看成是乙個集合,那麼每乙個數都應該對應集合的一種狀態,並且每...

狀壓DP《旅行商問題》

旅行社問題就是給乙個有向圖,從點0走一圈全部結點再走回來所花費的費用最少是多少。狀壓dp一般n 15。因為是走完全部點,那麼走到2點的費用有可能走了5,也可能沒走,那麼就不能簡單的用最短路來找。因為要求跑完全部點回到0,而最小樹形圖的話無法做到。狀壓dp是指在乙個點上存在多種狀態,這些狀態可以用二進...