切換
舊版
前往
大廳
主題

ZeroJudge - d203: 加法減法的奧妙 解題心得

Not In My Back Yard | 2019-09-13 22:56:02 | 巴幣 0 | 人氣 178

題目連結:


題目大意:
給定一正整數 n (3 ≦ n ≦ 16),代表現在有數字 1 ~ n ,並由左至右依序排列。接著,試圖在數字之間插入一個空白、「+」或是「-」,使得最後的總和為 0 。

插入一個空白的作用為連結數字,例如 n = 3 ,式子 1 2+3 代表 12 + 3 = 15 。

請輸出所有可以使得總和為 0 的插入方法,並依照字典序輸出。格式請參見範例輸出。



範例輸入:
7


範例輸出:
1+2-3+4-5-6+7
1+2-3-4+5+6-7
1-2 3+4+5+6+7
1-2 3-4 5+6 7
1-2+3+4-5+6-7
1-2-3-4-5+6+7


解題思維:
這題時限非常地寬鬆,直接用 DFS 依序在每個位置遞迴放空白、「+」、「-」的狀況(這個遞迴順序即按照了字典序)。

當所有運算子的位置都有放東西時,代表是已抵達最深處的遞迴堆疊(即停止條件)。此時判斷一下目前的式子之總和為多少。如果為 0 ,就輸出這個式子的樣子;反之,直接回到上一層的遞迴堆疊。

額外的最佳化就是將輸出最佳化(畢竟輸出量不小)、減少遞迴參數,以及可以確定式子中某些數字的總和時就計算,不要留到最後才算(可以減少重複計算)等等。

此次分享到此為止,如有任何更加簡潔的想法或是有說明不清楚之地方,也煩請各位大大撥冗討論。

創作回應

更多創作