1. 程式人生 > >輪流取數,最大收益遊戲

輪流取數,最大收益遊戲

ron pre ret 個人 pri 一個 splay 技術分享 aps

有一個整數串,有兩個人輪流取,每次可以取走一個前綴或後綴。兩人都足夠聰明,且都會使自己收益最大。求取完後先手收益。

技術分享
import numpy as np
from random import shuffle
n = 40
li = list(range(1, n+1))
shuffle(li)
sl = []
tmps = 0
for x in li:
    tmps += x
    sl.append(tmps)


def lsij(ls, i, j):
    return ls[j] - ls[i-1] if i else ls[j]

result = np.zeros((n, n), dtype=int)
for i in range(n): result[i, i] = li[i] for x in range(1, n): for i in range(n-x+1): j = i + x if j > n-1: break result[i, j] = lsij(sl, i, j) - min(result[i+1, j], result[i, j-1]) print(result[0, n-1])
View Code

輪流取數,最大收益遊戲