Це був теплий літній вечір ...
коли мій дурний автомобіль вирішив зірватися посеред дороги на дорозі назад із супермаркету. Я штовхнув її на бік і вирішив піти додому. Я відкрив багажник, щоб вийняти продуктовий продукт і залишки речі. Саме тоді я помітив, що предмети не були рівномірно упаковані. У деяких сумках були більш важкі предмети, а в інших - більш легкі речі - в деяких навіть було поєднання таких предметів. Щоб мені було легше переносити, я вирішив згрупувати все в два мішки і зробити їх ваги максимально наближеними один до одного.
Ваша мета
полягає в тому, щоб допомогти мені переставити предмети у дві сумки таким чином, щоб різниця між обома мішками була максимально близькою до нуля.
Математично:
ВАГАЛЬНА ЛІВА Рука - ВАГА ПРАВА РУКА ≈ 0
Приклад
Якщо у мене було лише 2 предмети, хліб та арахісове масло, а маса хліба - 250 грам, а арахісове масло - 150 грам, найкращий спосіб - носити їх окремо двома руками.
W LH - W RH = W (ХЛІБ) - W (P.BUTTER)
250 - 150 = 100
Інша можливість:
W (ХЛІБ, P.BUTTER) - W (порожня рука) = (250 + 150) - 0 = 400
Це не краще, ніж наш перший випадок, тому вам слід піти з першим.
Ваш код повинен
- взяти введення цифр із зазначенням ваги предметів у сумці для покупок. Одиниці не важливі, але вони повинні бути однаковими (в ідеалі кілограмами або грамами). Введення можна зробити по одному або всім відразу. Ви можете обмежити загальну кількість до 20 предметів, якщо ви хочете.
- Формат / тип введення вирішувати вам, але нічого іншого, крім ваг, не повинно бути.
- Будь-яка мова дозволена, але дотримуйтесь стандартних бібліотек.
- Дисплейний вихід. Знову ж таки, ви можете вибрати формат, але поясніть формат у своїй публікації. тобто як ми можемо визначити, які з них є предметами лівої руки, а які - предметами правої руки.
Очки
- Найкоротший код виграє.
Підказка
Два можливих алгоритми, про які я міг би придумати, - це диференціація (швидше) та перестановки / комбінації (повільніше). Ви можете використовувати той чи інший алгоритм, який виконує цю роботу.