我是個對電腦科學有興趣的學生,我會貼上我的學習歷程及生活心情,也請大大們多多指教。 :)

2015年4月4日 星期六

[UVa] 10128 - Queue

題目網址: http://goo.gl/7TD7JM

題意: 有 n 個身高皆不同的人排成一排,問左邊看到 p 個人,右邊能看到 r 個人,問有幾種排列可能。


解法: 要找排列情況可聯想 DP,所以想辦法想出遞迴方程,想像當總人數為 n' 個人,左邊看的到 p' 個人,右邊看的到 r' 個人,想把最矮的人拿掉的所有情況,假設最矮的人站在第一個位子,那拿掉他之後從左邊看就會少一個人,如果最矮的人站在最後一個位子,拿掉他後從右邊看也會少一個,如果最矮的人站在中間任何一個位子,拿掉他之後,從左邊或右邊看人數不變

dp[n'][p'][r'] =
{ 1, if n' = p' = r' = 1
{ dp[n'-1][p'-1][r'] + dp[n'-1][p'][r'] + dp[n'-1][p'][r'-1], if n' > 1, 1 <= p', r' <= n'

TAG: DP

注意:

程式碼:

沒有留言:

張貼留言

任何意見都樂意傾聽