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

2015年3月19日 星期四

[UVa] 10081 - Tight Words

題目網址: http://goo.gl/Y2K2tk

題 意: 給定兩個整數 k, n,如果一個由 0 ~ k 組成長度為 n 的字串是 "tight",則代表相鄰的兩位數差不超過 1,問所有字串中包含 "tight" 字串的比例。


解法: 用DP解,當求第 i 層的答案時,會跟第 i-1 層的答案相關。

dp[ i ][ j ] =
{ 1/(k+1),if i = 0 and 0 <= j <= k
{ 1/(k+1) * ( dp[i-1][j] + dp[i-1][j+1] ), if i > 0 and j = 0
{ 1/(k+1) * ( dp[i-1][j-1] + dp[i-1][j] + dp[i-1][j+1] ), if i > 0 and 1 <= j <= k-1
{ 1/(k+1) * ( dp[i-1][j-1] + dp[i-1][j] ), if i > 0 and j = k
代表當長度為 i+1 且結尾為 j 的字串出現的機率

TAG:DP

注意:可以利用滾動數組來降低空間複雜度

程式碼:

沒有留言:

張貼留言

任何意見都樂意傾聽