hdu 2209 狀態壓縮廣搜

2021-06-28 06:10:10 字數 1192 閱讀 5137

思路:    20張牌     有1>>20中情況        用二進位制標記,  這道題的關鍵地方就是怎樣無翻牌     這裡用到位運算   1^x    若x為0  則為1   否則為0  這裡正好用到翻牌     對前兩張和後兩張  都可以和3(11)進行異或運算     對中間的和7(111) 進行異或運算       

#include#include#include#includeusing namespacestd;

intmark[1<<20],leap[20],num[20],step[1<<20],n;

intbfs()

memset(mark,0,

sizeof

(mark));memset(step,-1,

sizeof

(leap));mark[a]=1;step[a]=0;queue<

int>q;q.push(a);

while

(!q.empty())}}

return0;

}int

main

()return0;

}

hdu1429(廣搜 狀態壓縮(位壓縮))

一開始用廣搜來做,超記憶體了,然後參照網上的資料,用位壓縮來做,頭一次做這種題,但個人感覺還是很好理解的,稍微看了一下就懂了,然後自己寫了個程式。思路 乙個有10把鑰匙,用10個位來表示,例如100 4 表示只有第三把鑰匙,1100 12 表示有第三四把鑰匙。如下 include include i...

hdu 2209 BFS 狀態壓縮

這題bfs是比較簡單,但是就是在狀態壓縮和那個翻牌的操作就蛋疼了。開始的時候暴力。華麗麗的超時了。最後看了別人的思路,才恍然大悟。這題 因為翻牌是0變1,1變0,所以可以通過異或來實現,而每一位的翻牌操作,只需要事前把用來異或的數算出來儲存就行,如下 handle 1 3 handle length...

hdu 5094 Maze 狀態壓縮dp 廣搜

使用廣度優先搜尋,dp key x y 表示在擁有鑰匙key並在座標 x,y 時需要的最少的步數,key的二進位制的第i位等於1則代表擁有第i把鑰匙。需要注意以下幾點 1.可能存在同一座標有多把鑰匙。2.牆和門是在兩個座標間進行移動時的障礙,並不在座標點上,因此兩個方向的移動都要加入wall陣列。2...