就問你們出題人夠不夠良心,出個簡單廣搜,而且資料還是很水的,寫不對也有不少分
不會廣搜的,或者不熟悉的先學學吧
題解配圖純手畫┐(『~`;)┌ ,凑活看吧qwq
然後這題有不少解法,這裡就只提供一種了
這道題呢,容易想到,搜尋白棋聯通塊,同時統計周圍的氣數(即空白格數),然後對於氣數為一的聯通塊,取大小最大的落子,
再加上開局已死的白棋個數,即ans=max+已死白棋數
但是想想就會發現,這麼直接蒐會有一些漏洞
比如這個:
可以看到,這個圖中,我們在點1和點2會分別搜到空白,加一口氣,這樣下來就會有兩口氣
這個地方錯了?估計你就沒什麼分了……
所以我們通過乙個二維的breath陣列來記錄每個點是否曾被統計
氣數的統計時,只統計還未被標記的點
那麼經過仔細思考,問題又來了
如圖:
在統計左側聯通塊時,我們把兩口氣都標沒了,然後右側就視為沒氣了,顯然是不對的
但是實測,這樣是能拿60分的( ̄▽ ̄)~*
解決方案也不難想,我們可以開乙個棧,把所有標沒的氣恢復,一次搜尋結束後再把氣標回來
在瞎湊一下,我們發現,還有乙個小問題
再給張圖:
在這張圖中,最大一口氣聯通塊個數為4,但是答案是7啊,堵住圖中的氣能殺敵人兩片棋
但是表慌,錯了也有90分
觀察到這樣一種性質,我們要統計的是只剩一口氣的聯通塊,不妨把合法聯通塊大小作為權值掛到那個氣的位置,
這樣我們只需找出權值最大的位置就好了
所以,答案最終是ans=max+dead