ProjectEuler 371 Licence plates - 拼圖

Frederica avatar
By Frederica
at 2012-02-13T09:28

Table of Contents

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

一開始往馬可夫鏈的方面去想,結果被困了好久
最後靈光一閃,發現了其實只是個簡單的DP題

車牌英文字母不重要, 因為對每一個數字來說,每一種3位英文字母出現的機率相等
所以問題簡化成只有數字相加
要加成1000, 一共有1+999, 2+998, 3+997, ...., 499+501, 500+500;500種配對
500比較特殊,要另外討論,所以是499個數字配對和跟有沒有500
DP的狀態是500*2
表示499對數字中,有幾對已經在「聽牌狀態」了,跟有沒有500數字在其中,所以是500*2
已出現的數字是{2,3,499}跟{7, 23, 888}沒有不同,在DP上,都是屬同一個狀態
皆是表示有3對數字在「聽牌狀態」

「聽牌狀態」是我發明的辭,表示一個數對已有其中之一被看到,
在等待另一個數字湊成1000

接下來是求取每一次看見車牌,還無法湊成1000的機率
假設在第n次看見車牌後,還無法湊成1000的機率為p_n(註: 用 _ 表示下標)

很顯然的
在前一次尚未湊成1000,而在這次湊成1000的機率為(1-p_n)-(1-p_(n-1))=p_(n-1)-p_n
期望值為 sigma(2<=n=∞) (p_(n-1)-p_n)*n

很直覺的,p_1=1
p_2以後就用DP算出
差不多算到第300次看見車牌,p_n就衰減到近乎於零
所以算到300次即可

--
Tags: 拼圖

All Comments

Anthony avatar
By Anthony
at 2012-02-17T20:38
機率和組合最頭大了~
Ethan avatar
By Ethan
at 2012-02-21T16:23
其實馬可夫鏈就只是一口氣做很多次 DP 而已...

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 定義數列 ...