poj 2688 狀態壓縮dp解tsp

2021-06-29 03:27:04 字數 667 閱讀 3682

題意:

裸的tsp。

分析:用bfs求出任意兩點之間的距離後可以暴搜也可以用next_permutation水,但效率肯定不如狀壓dp。dp[s][u]表示從0出發訪問過s集合中的點,目前在點u走過的最短路程。

**://poj 2688

//sep9

#include #include using namespace std;

const int maxw=32;

const int maxn=12;

int dx[4]=;

int dy[4]=;

char graph[maxw][maxw];

int g[maxw][maxw];

int vis[maxw][maxw];

int d[maxn][maxn];

int n,w,h;

int dp[1q.push(dirty_pnt[s]);

vis[dirty_pnt[s].x][dirty_pnt[s].y]=0;

while(!q.empty())

} }} int rec(int s,int u)

int main()

{ int i,j,k;

while(scanf("%d%d",&w,&h)==2&&(w+h)){

for(i=0;i

POJ 狀態壓縮DP專題

poj3254 狀態壓縮dp的入門題。純粹的二維遞推,還可以通過滾動陣列優化,但這裡並不需要。include include include using namespace std int m,n,f 13 1 12 intmap 13 int in bool check int j,int k i...

poj 2411 狀態壓縮DP

用乙個vector容器來記錄當前狀態下有哪些狀態可以繼承。比如說vec i 裡面的所有的數代表當第一行為i狀態時,第二行的可行狀態。對於狀態i,其二進位制中0的地方表示為當前狀態為豎著的木板的下半部分。其二進位制中1的地方表示為當前狀態為橫著的木板或者豎著的木板的上半部分。include inclu...

poj 1185 狀態壓縮DP

這題開始直接狀態壓縮每行 2 m 然後就tle了。最後看了下別人的發現其實每行的狀態沒有這麼多,因為相鄰兩個大炮的距離不能小於2 所以當m為10 的時候每行的狀態只有60種,每次在得到m的時候,直接搜出這些狀態儲存起來,然後就可以了。ac 如下 include include include inc...