jzoj:【2011.10.29模擬】24點遊戲題解

題目描述
24點遊戲是一個非常有意思的遊戲,很流行,玩法很簡單:給你4張牌,每張牌上有數字(其中A代表1,J代表11,Q代表12,K代表13),你可以利用數學中的加、減、乘、除以及括號想辦法得到24,例如:
((A* K)-J) * Q等價於((1 * 13)-11) * 12=24
加減乘不用多說了,但除法必須滿足能整除才能除!這樣有一些是得不到24點的,所以這裏只要求求出不超過24的最大值。

輸入
輸入第一行N(1<=N<=5)表示有N組測試數據。每組測試數據輸入4行,每行一個整數(1到13)表示牌值。

輸出
每組測試數據輸出一個整數,表示所能得到的最大的不超過24的值。

樣例輸入
3
3
3
3
3
1
1
1
1
12
5
13
1

樣例輸出
24
4
21

題解:
題目主要講的是給n組數據,求他們小於等於24的最大組合(就是單純的二十四點)。
搞清楚題目大意,我們就把問題簡化一下:

法1:
全排列+挨個枚舉。
O(44 * 53 *5)
實際上可能更長,所以這不是重點。

法2:
把這個二十四點轉換成四個數和併成一數,每次合併把兩個數合成一個數,和並分五種來枚舉:
設合併的兩數爲i,j。

i+j
i-j
j-i (別忘了這個)
i*j
i%j=0就i/j j%i=0就j/i (注意除數不能等於0)
合併的方法:

i=1~3
j=i~4
if(a[i]和a[j]有任意一個以前合併過就不進行合併)
1
2
3
合併3次後就判斷,因爲合併方法,所以最後的答案一定在a[1] (可以自己想想)
然後就好了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章