สมมติว่าเรามีรายการจำนวนบวกที่เรียกว่า nums ตอนนี้ให้พิจารณาการดำเนินการที่เราลบสองค่า a และ b โดยที่ a ≤ b และถ้า a
ดังนั้น ถ้าอินพุตเป็น nums =[2, 4, 5] ผลลัพธ์จะเป็น 1 เพราะเราสามารถเลือก 4 และ 5 แล้วใส่กลับ 1 เพื่อให้ได้ [2, 1] ตอนนี้เลือก 2 และ 1 เพื่อรับ [1].
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
- s :=ผลรวมขององค์ประกอบทั้งหมดที่มีอยู่ใน nums
- กำหนดฟังก์ชัน f() นี่จะใช้เวลา i, s
- ถ้า i>=ขนาดของ nums แล้ว
- คืนสินค้า
- n :=nums[i]
- ถ้า s - 2 * n <0 แล้ว
- ผลตอบแทน f(i + 1, s)
- ผลตอบแทนขั้นต่ำของ f(i + 1, s - 2 * n) และ f(i + 1, s)
- จากวิธีหลักส่งคืน f(0, s)
ตัวอย่าง
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -
def solve(nums): s = sum(nums) def f(i, s): if i >= len(nums): return s n = nums[i] if s - 2 * n < 0: return f(i + 1, s) return min(f(i + 1, s - 2 * n), f(i + 1, s)) return f(0, s) nums = [2, 4, 5] print(solve(nums))
อินพุต
[2, 4, 5]
ผลลัพธ์
1