2013\National _C_C++_A\2.骰子迷题
小明參加了少年宮的一項(xiàng)趣味活動(dòng):每個(gè)小朋友發(fā)給一個(gè)空白的骰子(它的6個(gè)面是空白的,沒(méi)有數(shù)字),要小朋友自己設(shè)計(jì)每個(gè)面寫(xiě)哪個(gè)數(shù)字。但有如下要求:
每個(gè)面只能填寫(xiě) 0 至 8 中的某一個(gè)數(shù)字。
不同面可以填寫(xiě)同樣的數(shù)字,但6個(gè)面總和必須等于24。
填好后,小朋友可以用自己填寫(xiě)好數(shù)字的骰子向少年宮的兩個(gè)機(jī)器人挑戰(zhàn)----玩擲骰子游戲。規(guī)則如下:
三方同時(shí)擲出自己的骰子,如果出現(xiàn)任何相同的數(shù)字,則三方都不計(jì)分。
如果三方數(shù)字都不同,則最小數(shù)字一方扣 1 分,最大數(shù)字一方加 1 分。
小明看到了兩個(gè)機(jī)器人手中的骰子分別是:
0 0 0 8 8 8
1 1 4 5 6 7
請(qǐng)你替小明算一下,他如何填寫(xiě),才能使自己得分的概率最大。
請(qǐng)?zhí)峤恍∶鲬?yīng)該填寫(xiě)的6個(gè)數(shù)字,按升序排列,數(shù)字間用一個(gè)空格分開(kāi)。
如果認(rèn)為有多個(gè)答案,提交字母序最小的那個(gè)方案。
請(qǐng)嚴(yán)格按照格式,通過(guò)瀏覽器提交答案。
注意:只提交一行內(nèi)容,含有6個(gè)被空格分開(kāi)的數(shù)字。不要寫(xiě)其它附加內(nèi)容,比如:說(shuō)明性的文字。
DFS
Code
def calculateProbability():"""計(jì)算獲勝概率"""global ans, maxInfx1, x2, m = 0, 0, 0for i in range(6):x1, x2 = 0, 0for j in range(6):if ans[i] > a[j]:x1 += 1else:breakfor j in range(6):if ans[i] > b[j]:x2 += 1else:breakm += x1 + x2if m > maxInf:maxInf = mprint(ans)def dfs(n: int, c: int, s: int):"""n: 骰子的六個(gè)面c: 當(dāng)前面的點(diǎn)數(shù)s: 當(dāng)前點(diǎn)數(shù)之和"""if s > 24:returnif n == 6:if s == 24:calculateProbability()returnfor i in range(c, 9):# 剪枝,如果剩下的所有面全部用 8 點(diǎn)能夠滿(mǎn)足點(diǎn)數(shù)之和的需求if (5 - n) * 8 >= 24 - s - i:ans[n] = idfs(n + 1, i, s + i)ans[n] = 0if __name__ == '__main__':a, b = [0, 0, 0, 8, 8, 8], [1, 1, 4, 5, 6, 7]ans, maxInf = [0] * 6, 0dfs(0, 0, 0)Answer:2 2 2 2 8 8
總結(jié)
以上是生活随笔為你收集整理的2013\National _C_C++_A\2.骰子迷题的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 2013\National _C_C++
- 下一篇: 2013\National _C_C++