程式設計訓練第三十七期 石子遊戲

2021-10-22 06:57:45 字數 1025 閱讀 4563

亞歷克斯和李用幾堆石子在做遊戲。偶數堆石子排成一行,每堆都有正整數顆石子 piles[i] 。遊戲以誰手中的石子最多來決出勝負。石子的總數是奇數,所以沒有平局。亞歷克斯和李輪流進行,亞歷克斯先開始。 每回合,玩家從行的開始或結束處取走整堆石頭。 這種情況一直持續到沒有更多的石子堆為止,此時手中石子最多的玩家獲勝。假設亞歷克斯和李都發揮出最佳水平,當亞歷克斯贏得比賽時返回 true ,當李贏得比賽時返回 false 。

1.遞迴

遞迴函式定義:返回當前做選擇的玩家,在當前區間[i,j],贏過對手的分數。如果》0,則代表他在這個子問題中贏了。即,當前選擇的分數減去之後對手贏過自己的分數(對剩餘陣列遞迴)。因為有兩端可選擇,所以差值有兩個,取較大的判斷是否》0。

時間複雜度o(2^n)

空間複雜度o(log n)

class

solution

public

:bool

stonegame

(vector<

int>

& piles)

};

2.記憶化遞迴

比如,你先選 第乙個5,我再選 後乙個5,和你先選 後乙個5,我再選 第乙個5,都是剩下[3, 4],這屬於相同的子問題。我們可以儲存計算過的子問題的解,當遇到重複的子問題,就不用再次遞迴計算。

class

solution

public

:bool

stonegame

(vector<

int>

& piles)

};

3.動態規劃

時間複雜度:o(n^2)。

空間複雜度:o(n^2)。

class

solution

};

狀態壓縮

時間複雜度:o(n^2)。

空間複雜度:o(n)。

class

solution

};

第三十七章 天神山

茫茫草原上。李正在那雄性烈風神鵰面前,口中也出一連竄悅耳的聲音。那頭烈風神鵰看了看滕青山,李在旁邊又連著勸說。終於,那頭黑色烈風神鵰那碩大頭顱點了點。李興奮轉頭看向滕青山 滕大哥,大黑已經答應了,來吧,你坐在它背上。這烈風神鵰還真的聽你話。滕青山驚訝地走過來,隨後一躍而起,落在那烈風神鵰背上。烈風神...

LeetCode第三十七題 Python實現

title leetcode no.37 categories tags 今天三十了,新年快樂哈。編寫乙個程式,通過填充空格來解決數獨問題。乙個數獨的解法需遵循如下規則 數字 1 9 在每一行只能出現一次。數字 1 9 在每一列只能出現一次。數字 1 9 在每乙個以粗實線分隔的 3x3 宮內只能出現...

第三十七節 log日誌模組

import logging 日誌一共分為5個等級,從低到高分別是 1 debug 詳細的資訊,通常只出現在診斷上 2 info 確認一切按預期執行 3 warning 乙個跡象表明,一些意向不到的事情發生了,或者表明一些問題在不久將來 4 error 更嚴重的問題,軟體沒執行一些功能 5 crit...