切換
舊版
前往
大廳
主題

ZeroJudge - a276: 又分糖果囉 解題心得

Not In My Back Yard | 2019-05-10 13:42:38 | 巴幣 0 | 人氣 164

題目連結:


題目大意:
給定一正整數 n (1 ≦ n ≦  20),代表有 n 包糖果。接著的一列輸入有 n 個正整數(皆介於 1 ~ 1, 000, 000 之間),代表這 n 包糖果各自有的糖果數。

將這 n 包糖果「公平」地分給兩個人,並使得這兩個人的糖果數的差盡可能地小。求最小的差為何?


範例輸入:
4
1 3 7 8
5
1 2 4 9 4


範例輸出:
1
0


解題思維:
因為一包的糖果數最大可以到 1, 000, 000 ,而有 20 包。所以採用類似於背包問題的解法,陣列有可能就要開到 10, 000, 001 這麼大。因此這解法的時間複雜度會不甚理想(畢竟要把每個可能的糖果數跑過一次)。

而直接窮舉糖果的分配情形最多只會有 2 ^ 20 種情況(約一百萬),比上面的好上很多。因此直接窮舉出
第一包給第一個人/第一包給第二個人 → 第二包給第一個人/第二包給第二個人……
然後看每個情形最後兩個人的糖果數之差。並從這些差值之中選出最小的即是所求。

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

創作回應

更多創作