hdu 3502 bfs 狀態壓縮dp

2021-12-29 22:20:11 字數 2416 閱讀 9460

題意是給你n*m的矩陣 每個單位有乙個數,-1表示不能走 》=0表示有有多少個能量能獲得 問從左上角到右下角能獲得的做大能量值(走一步消耗1單位能量)

思路: 先bfs求出所有線之間的最短距離(當然 有用的只有有能量值的點和起點,終點) 然後狀態壓縮dp 找到最大能量值 這裡有幾個注意的地方

狀態盡量從1開始 減少陣列的空間(爆了一次) 其次是bfs是只搜有能量的點 其它都差不多;

#include

#include

#include

#includeusing namespacestd;#define inf 0x3f3f3f3fintmap[300][300],dis[25][25],mark[300][300],leap[300][300];

intdir[4][2]=;

intcoord[25][3],dp[1<<18][20],n,m;

structnodea,b;

intmin(inta,intb)

intbfs(intk)}}

return0;

}intmax(inta,intb)

int main()

if(map[1][1]==0&&(n>1||m>1))

else if(n==1&&m==1)

intt=-1;

for(i=1;i<=n;i++)

for(j=1;j<=m;j++)

}if(map[n][m]==0)

memset(dis,inf,sizeof(dis));

for(i=0;i<t;i++)

dis[t][t]=0;memset(dp,-1,sizeof(dp));dp[1][0]=map[1][1];

intk=(1

hdu 2209 BFS 狀態壓縮

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

hdu4845 狀態壓縮BFS

題意 給乙個n m的矩陣,從11,走到nm,格仔和格仔之間可能有牆,也可能有門,有的格仔上面有鑰匙,相應的鑰匙開相應的們,撿鑰匙和開門都不需要時間,問你最少多少部能走到nm.思路 哎!一眼就看出來了是個狀態壓縮搜尋的水題,結果wa了將近兩個小時,就是因為忽略了乙個點可能有多把鑰匙,回來說下這個題,我...

hdu 5025 bfs 狀態壓縮

首先因為鑰匙是順序拿取的,所以記錄當前取到第幾把就可以 因為殺蛇是無序的,所以要用0 1二進位制數表示 然後寬搜就好了 wrong了一天就是讀入問題,默默反省 include include include include include include define max 107 using n...