2010-08-03 29 views
2

Project Euler有一個頁面文件問題(儘管它僞裝換句話說)。歐拉298項目 - 必須有正確答案? (只有pastebinned代碼)

我根據樣本數據測試了my code(爲了不傷害任何人),並獲得與問題相同的記憶內容+分數。然而,沒有一個統一的分數組。它要求在50回合後得分的預期差異。分數的隨機抽樣:

1.50000000 
1.78000000 
1.64000000 
1.64000000 
1.80000000 
2.02000000 
2.06000000 
1.56000000 
1.66000000 
2.04000000 

我已經嘗試了一些那些作爲答案,但他們都沒有被接受......我知道一些人成功了,所以我真的很困惑 - 我錯過了什麼?

+0

蒙特卡羅測試的主要候選人!你甚至可以使用這個測試來保持它在1分鐘的規則下,雖然如前所述,我相信有一個公式可以得到實際的預期值。另外,'confused'是一個標籤?這太棒了! – corsiKa 2010-08-03 18:45:27

+0

* * *甚至沒有補足;)(儘管我認爲這是我第一次真正有一個很好的藉口來使用它) – 2010-08-03 19:02:10

+0

我不認爲蒙特卡洛模擬會是一個好想法得到8位有效數字,恕我直言,這意味着10^16模擬運行的順序。 – starblue 2010-08-04 07:04:01

回答

2

您的問題可能是您似乎不知道Expected Value的定義。

您將不得不多次運行模擬,並針對每個得分差異,保持該出現的頻率,然後採用加權平均值來獲得預期值。

當然,鑑於這是歐拉項目問題,可能有一個可以很容易使用的數學公式。

+0

諷刺的是,我覺得自己像一個白癡,莫倫回答了我的問題?你完全正確 - 我從未聽說過預期價值。詛咒你歐拉項目和你的數學術語!哦,至少我今天學到了一些*新東西。 – 2010-08-03 18:31:43

0

我會運行你的模擬很多次,然後在所有運行中對| L- R |值進行加權平均。這應該讓你更接近預期的價值。

只提交一次運行作爲答案是不太可能的。想象一下,這是擲骰子的期望值。擲骰子,得分6,提交,如預期的價值。

2

是的,這是一個正確的答案。說實話,蒙特卡羅在理論上可以接近大數定律的期望值。但是,你不會想在這裏嘗試。因爲實際上每次運行simu時,都會得到一個稍微不同的結果,小數點後8位(我認爲這種設置確實剝奪了任何人甚至有想到使用蒙特卡羅的機會)。如果你幸運的話,你將有一個simu在經過大量試驗後提供答案,因爲你已經提交了所有以前和失敗的答案。我認爲,captcha是euler項目讓你放棄任何暴力方法的第二種方式。

那麼,與莫倫一致,你必須先弄清楚「預期值」。這個問題的原理是,你必須找到一種方法,在50輪之後列舉每一個可能的「基本」結果。每個結果都有自己的| L-R |,所以總結起來,你會得到答案。不用說,大部分情況下蠻力方法都失敗了,特別是在這種情況下。幸運的是,我們有動態編程(dp),這很快!

基本上,dp將每一輪的計算結果保存爲狀態,並在下一次使用它們。因此它避免了一遍又一遍地重複同樣的計算。這個問題的難點在於找到表示狀態的方法,也就是說,如何保存臨時結果。如果你已經在dp中解決了問題290,那麼你可以從中得到一些關於如何理解問題和制定狀態的提示。

其實,這不是心靈最困難的部分。最難的思想是,你是否意識到這兩名球員的一些記憶狀態在數值上是不同的,但基本上是相同的。例如,L:12345 R:12345對L:23456 R:23456或甚至對L:98765 R:98765。這是由於該通話是隨機的。這也是我撰寫可能的「基本」成果的原因。也就是說,你可以將一些狀態歸納爲一個狀態。只有這樣做,你的程序才能在合理的時間內完成。