ProjectEuler 371 Licence plates - 拼圖

Charlotte avatar
By Charlotte
at 2012-02-14T19:34

Table of Contents

※ 引述《utomaya (烏托馬雅)》之銘言:
: ※ 引述《babufong (嗶嗶)》之銘言:
: : 371. Licence plates
: : http://projecteuler.net/problem=371
: : 俄勒岡州的車牌號碼是由三個英文字母後面接著三位數字(0到9)所組成的。
: : Seth 開車去上班時,他會玩一個小遊戲:
: : 每當他在路途上,看到兩個車牌號碼的數字部分相加為 1000 時,就算勝了這場遊戲。
: : (如 MIC-012 和 HAN-988,或是 RYU-500 和 SET-500,這都算勝利,只要是在同一趟
: : 車程中看到。)
: : 計算出 Seth 贏得遊戲所需要看到的車牌數的期望值,並將答案給到小數點後八位數。
: 一開始往馬可夫鏈的方面去想,結果被困了好久
以下是馬可夫鏈的解法:

(順便當防雷頁)




































設全部有 0 ~ n-1 的車牌要湊成 n 其中 n 為偶數

(原題為 n = 1000 的情形)

這個馬可夫鏈中一共有 n+1 個狀態

前 n 個對應於 utomaya 的 n 個 DP 格

(即前 n/2 個狀態是還沒看到 n/2, 後 n/2 個狀態是看到了一個 n/2)

而第 n+1 個狀態則是 "win" 是個吸收狀態

因此題目便是要求這個馬可夫鏈的"平均吸收次數"

先寫出它的轉移矩陣:

對 1≦i≦n/2, 狀態 i 代表看到了 i-1 組的數字之一但沒有 n/2

於是有 i 個情形停在狀態 i, 有 n-2i 個情形進入狀態 i+1,

有 1 個情形進入狀態 i+n/2, 有 i-1 個情形進入狀態 "win"

而狀態 i+n/2 代表看到了 i-1 組的數字之一且有一次 n/2

於是有 i 個情形停在狀態 i+n/2, 有 n-2i 個情形進入狀態 i+1+n/2,

有 i 個情形進入狀態 "win"

(當 i = n/2 時沒有進入狀態 i+1+n/2 的部份, 不過這個馬上可以處理)

所以它的轉移矩陣長這樣:

[ 1 n-2 1 0 ]
[ 2 n-4 1 1 ]
[ 3 n-6 1 2 ]
[ ... ... ... ]
[ n/2-1 2 1 n/2-2 ]
1 [ n/2 1 n/2-1 ]
---- [ 1 n-2 1 ]
n [ 2 n-4 2 ]
[ 3 n-6 3 ]
[ ... ... ]
[ n/2-1 2 n/2-1 ]
[ n/2 n/2 ]
[ n ]


可以看到扣除吸收的那個狀態

剩下的部份左上和右下是一樣的雙對角線矩陣 左下是 0 右上是 I/n

也就是這部份可以寫成

Q = [ Q' I/n ]
[ 0 Q' ]

參照 http://en.wikipedia.org/wiki/Absorbing_Markov_chain

我們可以計算其基本矩陣 N = (I-Q)^-1

計算結果是

N = [ (I-Q')^-1 (1/n)((I-Q')^-1)^2 ]
[ 0 (I-Q')^-1 ]

而平均吸收時間即為 N 乘上 1 向量

因此題目所求即為 N 矩陣的第一列的和

於是剩下的就是計算出 (I-Q')^-1 及其平方 這也很容易

因為 I-Q' 只有兩個對角線有值

因此直接以擴張矩陣 [I-Q' | I] 做倒回代換即可求得

其元素為

n j-1 n-2k
A_{i,j} = --- * Π ---- , i≦j (是個上三角矩陣)
n-j k=i n-k

由此 ((I-Q')^-1)^2 的元素為

n/2
B_{i,j} = Σ A_{1,k} A_{k,j}
k=1

n/2 n/2
因此所求即為 Σ A_{1,j} + (1/n) Σ B_{1,j}
j=1 j=1


n/2 / n/2 \
它可以化為 Σ A_{1,k} | 1 + (1/n) Σ A_{k,j} |
k=1 \ j=k /

所以程式上就先把 A 矩陣給算出來存著 (需時 O(n^3))

再套用上面這個式子 (需時O(n^2)) 就得到答案了

我猜 utomaya 被困住應該是不知道有計算"平均吸收時間"的公式...
















還是要擋一下的頁末防雷頁

--
ˊ_▂▃▄▂_ˋ. ◣          ▅▅ ▅▅ ι●╮  
./◤_▂▃▄▂_◥ \'▊   HARUHI █████ <■┘  
◤◤◥█◥◥█Δ   ISM    By-gamejye ¢|\   ▌▌
ζ(▏●‵◥′●)Ψ ▏           █    ⊿Δ   
/|▋ |\ ▎         ハルヒ主義      ▄█
◥◥|◣ ‵′ ◢/'◢◢S.O.S 世界をいに盛り上げるための宮ハルヒの   

--
Tags: 拼圖

All Comments

James avatar
By James
at 2012-02-18T12:38

LP開團

George avatar
By George
at 2012-02-12T22:20
http://ychsuswer.pixnet.net/blog/post/42603855 這是今年度的LP第一團, 目前已經開放大家登記, 歡迎有興趣的拼友一起來共襄盛舉唷^^ - ...

ProjectEuler 371 Licence plates

Tom avatar
By Tom
at 2012-02-12T18:10
371. Licence plates http://projecteuler.net/problem=371 俄勒岡州的車牌號碼是由三個英文字母後面接著三位數字(0到9)所組成的。 Seth 開車去上班時,他會玩一個小遊戲: 每當他在路途上,看到兩個車牌號碼的數字部分相加為 1000 時,就算勝 ...

跪求解法 心型、鐵扣、連環扣

Barb Cronin avatar
By Barb Cronin
at 2012-02-11T15:03
如題,在大掃除時,無意中發現一個以前買的益智玩具 如圖:http://ppt.cc/MrG8 以前解的出來,現在怎麼解也解不開 上網也找不到答案…因為連正確名字也忘了 因此跪求眾版友能幫忙解出這個從過年前煩我到現在的難題! - ...

玩反的魯班鎖mimi toys

Jack avatar
By Jack
at 2012-02-09T21:47
前幾天經過momo百貨時 有上7樓的玩反逛 發現已前進過的mimi toys有再出一些新形態的魯班類型組木 還蠻多種類的 有正常盒的也有mini盒的 外盒有標mini 2(二代) 正常盒跟小盒的都是100元一盒 ps:裡面有設類似風物語那種的專區耶 我看到一個媽媽推銷員講的口沫橫飛耶 她推銷的東西是LASY ...

假的ProjectEuler -翻轉數列

Dorothy avatar
By Dorothy
at 2012-02-08T18:58
如果一個數被轉180度後變成另一數,稱為「翻轉數」。例如169 andlt;-andgt; 691, 但 146 就非翻轉數。特別允許翻過來時0在首位,然後將其移除取值。 於是全由1,6,8,9,0組成的數就是翻轉數,記作rev(x) 例如 rev(1680) := 0891 := 891 定義數列 ...