Leetcode 877 StoneGame

題目

解題方案1:

  1. 整理一下規(guī)則:
    Alex转锈、Lee兩個人,Alex先手楚殿,Lee后手撮慨。
    每次只能拿 第一堆 或者 最后一堆
    兩個人拿取的策略 都是最優(yōu)的 都為了打敗對方

  2. 方程:
    i 為第一堆石子下標,j 為最后一堆石子下標
    如果 先手 選擇 i,則后手只能選擇 i+1 或者 j
    如果 先手 選擇 j砌溺,則后手只能選擇 i 或者 j-1

    則先手與后手石子堆的差為:
    piles[i] - opt(piles, i+1, j) 或者 piles[j] - opt(piles, i, j-1)
    opt(piles, i, j) 的意思是從piles數(shù)組里下標 ij 中選
    取石子堆的最佳組合影涉。
    因為中間選擇過程我們不清楚,所以可以用遞歸去窮舉规伐。

    最終結果只要大于0我們就認為先手勝了

    代碼如下:

i = 0
j = len(piles)

def opt(piles, i, j):
   if i==j:
       return piles[i]
   if j>i:
       return max( piles[i] - opt(piles, i+1, j),
                           piles[j] - opt(piles, i, j-1) )

return opt(piles, i, j) > 0

解題方案2:

能用遞歸的基本都能用遞推去解決蟹倾,遞推的過程也就是動態(tài)規(guī)劃。筆者是這么理解的猖闪,不一定正確鲜棠,因為本人覺得遞推和動態(tài)規(guī)劃都是遞歸的一個逆過程,遞歸是 從問題最終出發(fā)培慌,而遞推和動態(tài)規(guī)劃都是 從問題的開始出發(fā)豁陆。

具體怎么想到解題的思路,其實我也不知道吵护『幸簦可能題做多了就能知道吧,我也是看了別人的答案想了很久才想明白何址。

解題思路里逆,方案一講講述過的就不再累述了

  1. 既然是從 問題的開始出發(fā),那就從游戲開始的第一步來用爪, 這里的 游戲開始 準確的來說應該是從遞歸的最后一步開始原押。一開始還是很難理解的,多想想就能明白之中的奇妙了偎血。
    2.方案一遞歸到底的時候只有一個石子堆诸衔,即i=j的情況,然后會不斷上升到兩個石子堆颇玷,三個石子堆取最佳博弈的情況笨农,拿leetcode第一個例子[5,3,4,5]來說的話:
    遞歸是考慮了只剩下單獨石子堆的情況: [5] [3] [4] [5]
    剩下兩個石子堆的情況:[5,3] [3,4] [4,5]
    剩下三個石子堆的情況:[5,3,4] [3,4,5]
    最后全集的情況:[5,3,4,5]
    我們需要做的就是 自底而上的把最佳博弈情況求出來 因為單獨石子堆的情況最佳博弈情況 是 兩個石子堆里求出最佳博弈情況的基礎,以此類推帖渠。
  2. 最佳博弈情況方程 (狀態(tài)方程):
    與遞歸的方程是一樣的:
    max( piles[i] - opt(), piles[j] - opt() )
    先手 在當前狀態(tài)下的選擇的石子堆減去 之前兩者博弈的石子差(這個過程是累計的來得谒亦,即我們要每次記住當前人選擇的石子與后者選擇的石子差)。
    舉個例子
    因為遞歸最后一步是后手選擇空郊,轉為遞推和動態(tài)規(guī)劃的話份招,后手是第一步。
    設A為 先手狞甚, B為 后手
    [5,3,4,5]
    假設A選擇了第一個5锁摔,則B可以選擇3或者5,為了得到最佳博弈哼审,B會選擇5谐腰,此時的opt就為5孕豹。因為A選擇了5,此時的opt就是5-5=0十气。
    接下來A肯定選擇4励背, 則B就只能選擇3了,B選擇后的最佳博弈結果是3-0=3砸西,A選擇后的最佳博弈結果就是4-3=1椅野。
    這里是需要好好理解一下的。
    3.因為最佳博弈結果是要被記錄下來然后被后者使用的籍胯,就是為了避免遞歸過程中重復計算一樣的子過程。
    考慮到有兩個變量選最左邊i還是選最右邊j离福,這里就構建二維數(shù)組opt[N][N]來記錄了杖狼。N為piles數(shù)組的長度。
    opt[i][j]是用來記錄所有子問題的最佳博弈結果妖爷,因此就有在方案2上面說的所有情況蝶涩。這就是用二維數(shù)組記錄的原因。
    opt[1][3]表示piles[1]到piles[3]中的最佳博弈結果絮识。
    從單個情況opt[N][N]開始推到全集opt[0][N], 然后這個opt[0][N]就是我們需要求得的最后結果绿聘。

代碼如下:
上面談到的opt改成了dp

dp = [ [0 for _ in range (0,length)] for _ in range (0,length)]

for i in range (0,length):
    dp[i][i] = piles[i]
    
for i in range (length-2,-1,-1):

    for j in range (i+1,length):

        dp[i][j] = max( piles[i] - dp[i+1][j], piles[j] - dp[i][j-1] )

return dp[length-1][length-1] > 0
最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市次舌,隨后出現(xiàn)的幾起案子熄攘,更是在濱河造成了極大的恐慌,老刑警劉巖彼念,帶你破解...
    沈念sama閱讀 219,427評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件挪圾,死亡現(xiàn)場離奇詭異,居然都是意外死亡逐沙,警方通過查閱死者的電腦和手機哲思,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,551評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來吩案,“玉大人棚赔,你說我怎么就攤上這事∨枪” “怎么了靠益?”我有些...
    開封第一講書人閱讀 165,747評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長崎岂。 經(jīng)常有香客問我捆毫,道長,這世上最難降的妖魔是什么冲甘? 我笑而不...
    開封第一講書人閱讀 58,939評論 1 295
  • 正文 為了忘掉前任绩卤,我火速辦了婚禮途样,結果婚禮上,老公的妹妹穿的比我還像新娘濒憋。我一直安慰自己何暇,他們只是感情好,可當我...
    茶點故事閱讀 67,955評論 6 392
  • 文/花漫 我一把揭開白布凛驮。 她就那樣靜靜地躺著裆站,像睡著了一般。 火紅的嫁衣襯著肌膚如雪黔夭。 梳的紋絲不亂的頭發(fā)上宏胯,一...
    開封第一講書人閱讀 51,737評論 1 305
  • 那天,我揣著相機與錄音本姥,去河邊找鬼肩袍。 笑死,一個胖子當著我的面吹牛婚惫,可吹牛的內(nèi)容都是我干的氛赐。 我是一名探鬼主播,決...
    沈念sama閱讀 40,448評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼先舷,長吁一口氣:“原來是場噩夢啊……” “哼艰管!你這毒婦竟也來了?” 一聲冷哼從身側響起蒋川,我...
    開封第一講書人閱讀 39,352評論 0 276
  • 序言:老撾萬榮一對情侶失蹤牲芋,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后尔破,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體街图,經(jīng)...
    沈念sama閱讀 45,834評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,992評論 3 338
  • 正文 我和宋清朗相戀三年懒构,在試婚紗的時候發(fā)現(xiàn)自己被綠了餐济。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,133評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡胆剧,死狀恐怖絮姆,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情秩霍,我是刑警寧澤篙悯,帶...
    沈念sama閱讀 35,815評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站铃绒,受9級特大地震影響鸽照,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜颠悬,卻給世界環(huán)境...
    茶點故事閱讀 41,477評論 3 331
  • 文/蒙蒙 一矮燎、第九天 我趴在偏房一處隱蔽的房頂上張望定血。 院中可真熱鬧,春花似錦诞外、人聲如沸澜沟。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,022評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽茫虽。三九已至,卻和暖如春既们,著一層夾襖步出監(jiān)牢的瞬間濒析,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,147評論 1 272
  • 我被黑心中介騙來泰國打工啥纸, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留悼枢,地道東北人。 一個月前我還...
    沈念sama閱讀 48,398評論 3 373
  • 正文 我出身青樓脾拆,卻偏偏與公主長得像,于是被迫代替她去往敵國和親莹妒。 傳聞我的和親對象是個殘疾皇子名船,可洞房花燭夜當晚...
    茶點故事閱讀 45,077評論 2 355

推薦閱讀更多精彩內(nèi)容

  • 題目鏈接難度: 中等 類型:動態(tài)規(guī)劃 亞歷克斯和李用幾堆石子在做游戲。偶數(shù)堆石子排成一行旨怠,每堆都...
    wzNote閱讀 7,671評論 0 1
  • 在C語言中,五種基本數(shù)據(jù)類型存儲空間長度的排列順序是: A)char B)char=int<=float C)ch...
    夏天再來閱讀 3,345評論 0 2
  • 問題描述:【DP】712. Minimum ASCII Delete Sum for Two Strings 解題...
    牛奶芝麻閱讀 500評論 0 0
  • 博弈類問題的套路都差不多,下文舉例講解爽哎,其核心思路是在二維 dp 的基礎上使用元組分別存儲兩個人的博弈結果蜓席。掌握了...
    6默默Welsh閱讀 889評論 0 0
  • 今天雙十一,大家從昨晚凌晨就開始忙著搶購课锌,買這買那的厨内,我啥都沒買呵呵!我覺得雙十一肯定有貓膩渺贤,也不一點就是便宜多少...
    王飛媽媽閱讀 127評論 0 0