มันเป็นช่วงเย็นของฤดูร้อนที่อบอุ่น ...
เมื่อรถที่โง่ของฉันตัดสินใจที่จะพังกลางถนนระหว่างทางกลับจากซุปเปอร์มาร์เก็ต ฉันผลักมันไปงานอดิเรกและตัดสินใจที่จะเดินกลับบ้าน ฉันเปิดท้ายรถเพื่อนำของออกจากร้านขายของชำและสิ่งของอื่น ๆ ที่เหลืออยู่ ตอนนั้นเองที่ฉันสังเกตเห็นว่าสิ่งของไม่ได้ถูกบรรจุอย่างเท่าเทียมกัน กระเป๋าบางใบมีของหนักมากขึ้นในขณะที่กระเป๋าอื่น ๆ มีของที่บางกว่า เพื่อให้ง่ายต่อการพกพาฉันตัดสินใจจัดกลุ่มทุกอย่างลงในกระเป๋าสองใบและทำให้น้ำหนักของพวกเขาใกล้เคียงกันมากที่สุด
เป้าหมายของคุณ
คือช่วยฉันจัดเรียงสิ่งของในถุงช้อปปิ้งสองถุงด้วยวิธีที่ความแตกต่างระหว่างถุงทั้งสองใกล้เคียงกับศูนย์มากที่สุด
ศาสตร์:
WEIGHT LEFT HAND - WEIGHT RIGHT HAND ≈ 0
ตัวอย่าง
หากฉันมีเพียง 2 รายการขนมปังและเนยถั่วและน้ำหนักของขนมปังคือ 250 กรัมและเนยถั่วเป็น 150 กรัมวิธีที่ดีที่สุดคือการพกพาพวกเขาแยกกันด้วยสองมือ
W LH - W RH = W (BREAD) - W (P.BUTTER)
250 - 150 = 100
ความเป็นไปได้อื่น ๆ คือ:
W (BREAD, P.BUTTER) - W (มือเปล่า) = (250 + 150) - 0 = 400
นี่ไม่ได้ดีไปกว่าเคสแรกของเราดังนั้นคุณควรไปกับเคสแรก
รหัสของคุณควร
- ใส่ตัวเลขที่ระบุน้ำหนักของสินค้าในกระเป๋าช้อปปิ้ง หน่วยไม่สำคัญ แต่ควรจะเหมือนกัน (นึกคิดกิโลกรัมหรือกรัม) อินพุตสามารถทำได้ทีละตัวหรือทั้งหมดในคราวเดียว คุณสามารถ จำกัด จำนวนรวมได้สูงสุด 20 รายการหากต้องการ
- รูปแบบการป้อนข้อมูล / ประเภทขึ้นอยู่กับคุณที่จะเลือก แต่ไม่มีอะไรอื่นนอกเหนือจากน้ำหนัก
- อนุญาตให้ใช้ภาษาใดก็ได้ แต่ใช้กับไลบรารีมาตรฐาน
- แสดงผลออกมา คุณสามารถเลือกรูปแบบได้อีกครั้ง แต่อธิบายรูปแบบในโพสต์ของคุณ คือเราจะบอกได้อย่างไรว่าชิ้นไหนเป็นของมือซ้ายและของชิ้นไหนเป็นของมือขวา
จุด
- รหัสที่สั้นที่สุดชนะ
เปรย
อัลกอริทึมที่เป็นไปได้สองอย่างที่ฉันคิดได้คือความแตกต่าง (เร็วกว่า) และการเรียงสับเปลี่ยน / การรวม (ช้ากว่า) คุณสามารถใช้อัลกอริธึมเหล่านี้หรืออัลกอริธึมอื่นที่ทำงานได้