Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Python

Điểm tối đa Amal đạt được trong trò chơi lấy gạch trong Python

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