題意是給你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...