Programming學習筆記
網頁
首頁
UVa
POJ
顯示具有
Depth-first Search
標籤的文章。
顯示所有文章
顯示具有
Depth-first Search
標籤的文章。
顯示所有文章
2014年5月27日 星期二
UVa 10364 Square
想法:
dfs加上各種減支:
如果所有stick的長度和(sum)不能被4整除直接輸出no
如果最長stick的長度已經大於(sum/4)直接輸出no
dfs的時候已經排完三個邊直接return true,因為第四個邊一定排得出來
先將stick由大排到小,每次dfs的時候stick不要從第一個開始挑選,而是要從上一層dfs選到的stick的下一個開始選。
基本上第四點是關鍵,有跟沒有就是0.0x秒和TLE的差別。
閱讀更多 »
2014年5月26日 星期一
UVa 11218 KTV
題意:
總共有9個人(編號1~9)要分成3組唱歌,每組3個人,每個人只能唱一次。第一行N表示底下有N種組合,每種組合a,b,c,s,前三個是人員編號,s是該組合的分數。從N種中任選三種組合使得1~9號都能唱到歌,並且使得分數的和最高,輸出該分數,如果找不到組合滿足大家都能唱到歌則輸出-1。
想法:
bitmask,(1<<9)-1表示所有人都唱的到歌的狀態,二進位來看就是(111111111)
2
,dp[i]=j表示在狀態i的情況下最高分數為j,因此dp[(1<<9)-1]就是所有人唱的到歌的最高分數。
用dfs來枚舉不同組合,當人員沒有重複的時候才能將兩個狀態合併在一起,例如(000000111)
2
和(000111000)
2
這兩個狀態可以合併變成(000111111)
2
,並去更新dp[(000111111)
2
]的分數,不斷更新所有可能的合併來枚舉所有情況。
閱讀更多 »
2014年3月9日 星期日
UVa 604 The Boggle Game
題意:
在一個4x4 board裡找出所有符合的4個字元的單字,該單字須符合剛好只有2個母音('Y'也算母音),每次Case有兩個board,找出這兩個board交集的所有單字。
想法:
用DFS+backtracking先分別找出一個board的所有符合的單字,然後再將兩個board找出來的單字作交集:
閱讀更多 »
2014年3月7日 星期五
UVa 10305 Ordering Tasks
想法:
輸出只要符合是一個topological sort即可,因此可以從起點(沒有被任何點連入的點)用DFS走遍,並同時記錄走遍的點,最後再逆向輸出這些點就是一個topological sort。
UVa 11606 Pick up sticks
想法:
把放在最上面(也就是這個點沒有其他點連入)的stick當做起點,用DFS走遍,並將走遍的經過的點記錄下來,最後逆向輸出這些記錄的點就是一個topological sort。
UVa 200 Rare Order
題意:
Input給的那些字串是每個index的名稱,而這些Index是照"某個字典序"由小到大排好的(就像一般的目錄是從A~Z排好),我們要從Input裡面判斷這些字的字典序。例如Sample Input:
XWY
ZX
ZXY
ZXW
YWWX
我們可以從XWY和ZX判斷X<Z,ZXY和ZXW判斷Y<W,ZXW和YWWX判斷Z<Y,所以可以得到X<Z<Y<W。
**本題測資只有一個**
想法:
一次兩行判斷,找出誰<誰,記錄完之後,從沒有被連入的點當做起點,使用DFS走遍並記下走遍的點,將記下的點逆向輸出就是一個topological sort。
2014年2月27日 星期四
UVa 10308 Roads in the North
題意:
計算該graph最遠的距離。
想法:
DFS function 定義為"回傳該點能走的最遠深度",例如DFS(p點),則在DFS裡面我們對p點能前往的那些點做DFS,記下該路徑(route)的長度,並一直刷新route_max的大小,最後回傳route_max。
在刷新route_max"之前",我們先把(route+route_max)與ans比較,刷新ans,(route+route_max)表示p點往兩個不同方向的路徑的和,不斷刷新ans,就能產生最遠的距離。
UVa 10592 Freedom FIghter
題意:
'B'為fighter,'P'為enemy,'*'圍起來的範圍內為一個sector,sector的編號由左至右由上至下,要計算每個sector裡面有幾組fighter和幾組enemy,如果fighter和enemy面對面的話,表示有2個group在fighting position。
面對面的情況只會各有一組,
BBB
PP
不會有底下這種情況
BBB
PP
BBB
想法:
用DFS_1來走遍該sector,如果碰到'B'或'P'則用DFS_2走遍該group,並確認有沒有碰到另一個group。
2014年2月19日 星期三
UVa 539 The Settlers of Catan
題目連結
想法:
將每個點能連到哪些點存起來,然後對每個點使用DFS看該點最遠能走多深。
UVa 571 Jugs
想法:
題目沒說要最少步數(先輸出10次fill A empty A也可),所以直接用DFS求解即可。
2014年2月17日 星期一
UVa 260 Il Gioco dell'X
想法:
因為題目說一定有人獲勝,獲勝條件為黑色是由上走到下,白色是要由左走到右,因此就用DFS確認即可。
2014年2月16日 星期日
UVa 352 The Seasonal War
題意:
要確認畫面中有幾隻Eagles,每個pixel如果是'1'代表為一隻Eagles,但上下左右(包含斜角共8個方向)相連的'1'只能算是同一隻。
想法:
使用DFS找'1'有幾個區域。
2014年2月12日 星期三
UVa 657 The die is cast
題意:
定義上下左右如果有一樣的符號,這些符號為connected。
分辨骰子某一面的點數,以'*'圍起來的面積代表那是骰子的某一面,在那裡面要計算有幾個點數,而且如果有多個'X'是connected,只能算作一個點數,例如sample input裡面左上為2,右上為1(因為'X'是connected),左下為2,右下為4。
想法:
當碰到'*'的時候,代表有一塊區域,進入DFS_pixel走遍該區域,每走到一個點就將'*'變成'.'避免重複走過,如果碰到'X',一樣代表有一塊X區域,計數器+1,並進入DFS_X走遍該區域,並將走到的點從'X'轉為'*'。
較舊的文章
首頁
訂閱:
文章 (Atom)