[心得] 有多少種換飲料的方法
Math版的問題
飲料一瓶2元,4個瓶身能換1瓶,2個瓶蓋也能換1瓶。今有20元,最多可以喝幾瓶。
把題目改造成等價的東西,擁有的 (蓋,身) 數量是一個狀態
起始是(10,10),換蓋子移動(-1,1),換瓶身移動(1,-3),不可以停留在X/Y軸上
稍作探討可以發現最佳結果必然是最後停在(1,3)
瓶身值0.5元,瓶蓋值1元,飲料本身值0.5元,因此可以喝到 (20-1-1.5)/0.5 = 35瓶
這時候就想,假設一天換一次,總共有幾種獨特的兌換(走格子點)的方法?
果斷打開MMA
Clear[a]; a[_, _] = 0; (*除了有定義之外,預設值為零*)
(*a是個虛擬的陣列,實際上是tag 於 head "a"之下的百餘個儲存的定義。MMA像是
個巨大的表達式/規則比對引擎*)
a[10,10] = 1; a[11,7] = 1; a[12,4] = 1; a[13,1] = 1;
a[9,11] = 1; a[8,12] = 1; a[7,13] = 1; a[6,14] = 1; a[5,15] = 1;
a[4,16] = 1; a[3,17] = 1; a[2,18] = 1; a[1,19] = 1;
(*高中排組的捷徑問題那技巧*)
out[x_, y_] := x < 1 || x > 13 || y < 1 || y > 19;
While[a[1, 3] == 0,
Do[
Do[
If[And[
a[x + 1, y - 1] != 0 || out[x + 1, y - 1],
a[x - 1, y + 3] != 0 || out[x - 1, y + 3]],
a[x, y] = a[x + 1, y - 1] + a[x - 1, y + 3]
], {y, 1, 20 - x}];
, {x, 1, 13}];
];
a[1, 3]
Transpose@(Reverse /@ Table[a[x, y], {x, 1, 13}, {y, 1, 19}]) //
MatrixForm
(*把電腦表格順序改成我們慣看的x-y軸排列,就是行倒置,然後轉置*)
結果: 186360 種,跟一個表格debug用
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.112.213.88
※ 文章網址: http://www.ptt.cc/bbs/Mathematica/M.1401386380.A.08F.html
※ 編輯: jurian0101 (140.112.213.88), 05/30/2014 02:00:12
推
05/30 08:15, , 1F
05/30 08:15, 1F
→
05/30 08:15, , 2F
05/30 08:15, 2F
→
05/30 13:01, , 3F
05/30 13:01, 3F
推
05/31 01:32, , 4F
05/31 01:32, 4F
Mathematica 近期熱門文章
PTT數位生活區 即時熱門文章