切換
舊版
前往
大廳
主題

ZeroJudge - c130: 00574 - Sum It Up 解題心得

Not In My Back Yard | 2019-02-03 22:55:10 | 巴幣 0 | 人氣 161

題目連結:


題目大意:
題目包含多組測試資料,每組測試資料一列。每一列給定兩正整數 t 、 n (0 < t < 1, 000,1 ≦ n ≦ 12),以及已經由大排到小的n個正整數(皆小於 100)。

窮舉從給定的 n 個正整數中挑出數字之總和為 t 的方法。

若 n = 0 ,則停止程式。



範例輸入:
4 6 4 3 2 2 1 1
5 3 2 1 1
400 12 50 50 50 50 50 50 25 25 25 25 25 25
0 0



範例輸出:
Sums of 4:
4
3+1
2+2
2+1+1
Sums of 5:
NONE
Sums of 400:
50+50+50+50+50+50+25+25+25+25
50+50+50+50+50+25+25+25+25+25+25



解題思維:
整數分割的題目類似。只是這題「每一格」所使用的元素為題目給定的 n 個數字。所以「格子」最多也只有 n 個。

因為給定的n個數字已經由大排到小了,因此在做 DFS (廣度優先搜尋)時,不需特別判斷。但是要判斷現在挑的數字和,與後面剩下的數字是不是總和大於等於 t  。若否,則就可以不用繼續 DFS 下去,可以提早跳出。

當遇到任何總和為 t 的方法時就輸出(前面要記錄剛剛挑了那些數字)。

若到最後沒有任何方法,則輸出「NONE」。

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

創作回應

更多創作