Amal và Bimal chơi với mảng nums (số trên gạch). Mỗi lượt lấy 1, 2 hoặc 3 gạch từ đầu, cộng điểm. Amal đi trước. Tìm điểm tối đa Amal có thể đảm bảo.
Ví dụ: nums=[1,2,3,4,5] → 6 (Amal lấy 1, Bimal lấy 2,3,4, Amal lấy 5).
Giải thuật
- Đảo ngược mảng để dễ tính từ cuối.
- temp[i] = điểm tối đa người chơi hiện tại có thể đạt từ vị trí i đến cuối.
- temp[0]=nums[0], temp[1]=nums[0]+nums[1], temp[2]=temp[1]+nums[2].
- Với i≥3: temp[i] = max(nums[i], nums[i]+nums[i-1], nums[i]+nums[i-1]+nums[i-2]).
- Trả về temp[n-1].
Ví dụ mã Python
def solve(nums):
n = len(nums)
nums.reverse()
temp = [0] * n
total = [0] * n
for i, val in enumerate(nums):
total[i] = total[i-1] + val
temp[0] = nums[0]
temp[1] = temp[0] + nums[1]
temp[2] = temp[1] + nums[2]
for i in range(3, n):
a = nums[i]
b = nums[i] + nums[i-1]
c = nums[i] + nums[i-1] + nums[i-2]
temp[i] = max(a, b, c)
return temp[n-1]
nums = [1, 2, 3, 4, 5]
print(solve(nums)) # Output: 6
Đầu vào
[1,2,3,4,5]
Đầu ra
6