Cho danh sách điểm hiệu suất. Mỗi người ít nhất 1000. Nếu hai người liền kề, người tốt hơn phải nhận nhiều hơn ít nhất 1000. Tìm tổng tiền tối thiểu.
Ví dụ: → tiền [1000, 2000, 3000, 1000] → tổng 7000.
Giải thuật (Hai pass - Candy problem)
- Khởi tạo
. - Pass trái→phải: nếu
ratings[i-1]thì. - Pass phải→trái: nếu
ratings[i+1]thì. - Trả về
.
Ví dụ minh họa
class Solution:
def solve(self, ratings):
pay = [1] * len(ratings)
for i in range(1, len(ratings)):
if ratings[i] > ratings[i-1]:
pay[i] = pay[i-1] + 1
for i in range(len(ratings)-2, -1, -1):
if ratings[i] > ratings[i+1]:
pay[i] = max(pay[i], pay[i+1] + 1)
return sum(pay) * 1000
ob = Solution()
ratings = [1, 2, 5, 1]
print(ob.solve(ratings)) # Output: 7000
Đầu vào
[1, 2, 5, 1]
Đầu ra
7000