Giả sử chúng ta có ba giá trị a, b và c. Chúng tôi đang chơi trò chơi solitaire với ba đống đá có kích thước lần lượt là a, b và c. Mỗi lượt người chơi chọn hai cọc không trống khác nhau, lấy một viên đá từ mỗi cọc và cộng 1 điểm vào điểm của mình. Trò chơi kết thúc khi có ít hơn hai cọc không trống. Vì vậy, chúng tôi phải tìm điểm tối đa mà bạn có thể nhận được.
Vì vậy, nếu đầu vào là a =4, b =4, c =6, thì đầu ra sẽ là 7 vì trạng thái ban đầu là (4, 4, 6), sau đó chúng ta có thể làm theo các bước sau -
-
Chọn từ cọc thứ nhất và thứ hai để trạng thái hiện tại là (3, 3, 6)
-
Chọn từ cọc thứ nhất và thứ 3 để trạng thái hiện tại là (2, 3, 5)
-
Chọn từ cọc thứ nhất và thứ 3 để trạng thái hiện tại là (1, 3, 4)
-
Chọn từ cọc thứ nhất và thứ 3 để trạng thái hiện tại là (0, 3, 3)
-
Chọn từ cọc thứ 2 và thứ 3 để trạng thái hiện tại là (0, 2, 2)
-
Chọn từ cọc thứ 2 và thứ 3 để trạng thái hiện tại là (0, 1, 1)
-
Chọn từ cọc thứ 2 và thứ 3 để trạng thái hiện tại là (0, 0, 0)
Và cuối cùng có ít hơn hai cọc không trống, vì vậy trò chơi kết thúc.
Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau -
-
tối thiểu:=tối thiểu a, b và c
-
tối đa:=tối đa a, b và c
-
left:=a + b + c - tối đa - tối thiểu
-
nếu tối đa bên trái <=tối thiểu, thì
-
trả về tối thiểu + trái - thương số của (1 + tối thiểu - (tối đa bên trái)) / 2
-
-
trả về tối thiểu + (tối thiểu của (tối đa-tối thiểu) và trái)
Ví dụ
Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơn -
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))
Đầu vào
4, 4, 6
Đầu ra
7