ปัญหา
มีกองหิน 3 กอง ขนาด a, b, c แต่ละเทิร์นเลือก 2 กองที่ไม่ว่าง เอาหินออก 1 ลูกจากแต่ละกอง ได้ 1 คะแนน เกมจบเมื่อเหลือกองไม่ว่างน้อยกว่า 2 กอง หาคะแนนสูงสุด
ตัวอย่าง
a=4, b=4, c=6 → ผลลัพธ์ 7 (ลำดับการเอาออก: (3,3,6)→(2,3,5)→(1,3,4)→(0,3,3)→(0,2,2)→(0,1,1)→(0,0,0))
ขั้นตอนการแก้ปัญหา
minimum := min(a,b,c),maximum := max(a,b,c)left := a + b + c - maximum - minimum(ค่ากลาง)- ถ้า
maximum - left <= minimum:- คืน
minimum + left - (1 + minimum - (maximum - left)) // 2
- คืน
- มิฉะนั้น คืน
minimum + min(maximum - minimum, left)
การนำไปใช้งาน (Python)
def solve(a, b, c):
minimum = min(a,b,c)
maximum = max(a,b,c)
left = a+b+c-maximum-minimum
if maximum-left <= minimum:
return minimum + left - (1+minimum-(maximum-left))//2
return minimum + min(maximum-minimum, left)
a = 4
b = 4
c = 6
print(solve(a, b, c))
อินพุต
4, 4, 6
เอาต์พุต
7