#! /usr/bin/env python
# -*-coding:utf-8-*-
"""author: chilewang
created at 2020/03/20 15:59
question:
問題:有一排正數,代表數值不同的紙牌排成一條線,玩家a和玩家b都可以看到。
每位玩家在拿走數字的時候,都只能從最左和最右的數中選擇乙個。
玩家a先拿,玩家b再拿,兩人交替拿走所有的數字,
兩人都力爭自己拿到的數的總和比對方多。請返回最後獲勝者的分數。
例如:5,2,3,4
玩家a先拿,當前他只能拿走5或者4。
如果玩家a拿走5,那麼剩下2,3,4。輪到玩家b,此時玩家b可以選擇2或4中的乙個,…
如果玩家a拿走4,那麼剩下5,2,3。輪到玩家b,此時玩家b可以選擇5或3中的乙個,…
solution:
動態規劃
"""def card():
"""動態規劃之博弈問題
核心:斜著計算二維陣列
詳細解析:
:return:
"""arr = [1, 2, 100, 4]
arr = [3, 9, 1, 2]
first = [[0] * len(arr) for _ in range(len(arr))]
end = [[0] * len(arr) for _ in range(len(arr))]
for i in range(len(arr)):
first[i][i] = arr[i]
for i in range(1, len(arr)):
for j in range(len(arr)):
if i + j < len(arr):
first[j][j + i] = max(arr[j] + end[j+1][j + i], arr[j + i] + end[j][j + i - 1])
end[j][j + i] = min(first[j + 1][j + i], first[j][j + i - 1])
print(max(first[0][len(arr) - 1], end[0][len(arr)-1]))
for s in first:
print(s)
print('-------')
for s in end:
print(s)
return max(first[0][len(arr) - 1], end[0][len(arr)-1])
if __name__ == '__main__':
card()
刷題 動態規劃
動態規劃法 動態規劃求解問題的四個特徵 求乙個問題的最優解 整體的問題的最優解是依賴於各個子問題的最優解 小問題之間還有相互重疊的更小的子問題 從上往下分析問題,從下往上求解問題 題目 給你一根長度為n繩子,請把繩子剪成m段 m n都是整數,n 1並且m 1 每段的繩子的長度記為k 0 k 1 k ...
動態規劃題(阿里筆試)
有個窮困的藝術家。他畫了一幅超現實主義的作品 方塊手拉手 現在他已經把圖畫中手拉手的一排大小不一的方塊都畫出來了。現在要考慮上顏色了。可惜他手中的錢並不多了。但是他是個有追求的人,他希望這幅畫中每兩個相鄰的方塊的顏色是不一樣的。你能幫他計算一下把這幅畫上色後,最少需要花多少錢麼。輸入 n個方塊,k個...
動態規劃刷題總結
資料結構與演算法 41 動態規劃理論 最優子結構 無後效性和重複子問題 zj csdn部落格 乙個模型 多階段決策最優解模型,重點在於多階段,每個階段都對應著不同的狀態 三個特徵 最優子結構,無後效性,重複子問題。主要抓住最優子結構這一特徵,理解為後面的階段狀態可以由前面的階段狀態推導而來。狀態定義...