Giả sử có 3 * n số lượng tiền xu hiện có và chúng có kích thước khác nhau, ba người chơi đang chơi một trò chơi như -
-
Trong mỗi bước, người chơi 1 sẽ chọn 3 cọc tiền bất kỳ.
-
Theo lựa chọn của mình, Người chơi 2 sẽ chọn đống có số xu tối đa.
-
Người chơi 1 sẽ chọn đống tiếp theo với số xu tối đa.
-
Người chơi 3 sẽ chọn cọc cuối cùng.
-
Lặp lại các bước này cho đến khi không còn đống xu nào nữa.
Bây giờ nếu chúng ta có một mảng các số nguyên được gọi là cọc trong đó cọc [i] là số đồng xu trong cọc thứ i, thì chúng ta phải tìm số đồng xu tối đa mà Người chơi 1 có thể có.
Vì vậy, nếu đầu vào giống như các cọc =[2,4,1,2,7,8], thì đầu ra sẽ là 9 vì lúc đầu chúng ta có thể chọn một bộ ba (2,7,8), sau đó Người chơi 2 chọn 8, Người chơi 1 chọn 7 và 2 là cho Người chơi 3. Sau đó, một lần nữa chọn bộ ba (1,2,4), sau đó Người chơi 2 chọn cọc với đồng xu 4, sau đó Người chơi1 chọn 2 và giữ lại 1 cho Người chơi3. Hiện tại Player1 có 7 + 2 =9 xu, đây là số tiền tối đa.
Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau -
-
sắp xếp các đống danh sách
-
ans:=0
-
trong khi kích thước của cọc không bằng 0, do
-
ans:=ans + phần tử cuối cùng thứ hai từ các cọc
-
xóa phần tử cuối cùng thứ hai khỏi các cọc
-
xóa phần tử cuối cùng khỏi các cọc
-
xóa phần tử đầu tiên khỏi cọc
-
-
trả lại ans
Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơn -
Ví dụ
def solve(piles): piles.sort() ans = 0 while(len(piles)!=0): ans = ans + piles[-2] del piles[-2] del piles[-1] del piles[0] return ans piles = [2,4,1,2,7,8] print(solve(piles))
Đầu vào
[2,4,1,2,7,8]
Đầu ra
9