lintcode 硬幣排成線2

2021-09-20 10:01:17 字數 932 閱讀 1274

有 n 個不同價值的硬幣排成一條線。兩個參賽者輪流從 左邊 依次拿走 1 或 2 個硬幣,直到沒有硬幣為止。計算兩個人分別拿到的硬幣總價值,價值高的人獲勝。

請判定 先手玩家 必勝還是必敗?

若必勝, 返回 true, 否則返回 false.

樣例 1:

輸入: [1, 2, 2]

輸出: true

解釋: 先手玩家直接拿走兩顆硬幣即可.

樣例 2:

輸入: [1, 2, 4]

輸出: false

解釋: 無論先手拿乙個還是兩個, 後手可以拿完, 然後總價值更高.

設dpi表示從i到n-1處,先手比後手多拿的分數。那麼要求的就是dp0的正負。

因為只可以拿1個或者2個,所以最後的2個dpn-1 = values[n-1], dpn-2 = values[n-1]+values[n-2].

對於任意的dpi,也是只有2個取法:

拿1個values[i]時,先手獲得了values[i],但是對於剩下的,他失去了先手,對面的先手獲得了dpi+1,所以他比對面多values[i]-dpi+1

拿2個,values[i]和values[i+1]時,先手獲得了values[i]+values[i+1],對面的先手可以獲得dpi+2,所以此時先手比對面多values[i]+values[i+2]-dpi+2

最終可以從n-3計算到0,得到正負。

123

4567

891011

1213

1415

1617

1819

20

class solution 

return dp[0] > 0;}};

-------------end of file

thanks for reading-------------

lintcode 硬幣排成線

有 n 個硬幣排成一條線。兩個參賽者輪流從右邊依次拿走 1 或 2 個硬幣,直到沒有硬幣為止。拿到最後一枚硬幣的人獲勝。請判定 先手玩家 必勝還是必敗?若必勝,返回 true,否則返回 false.輸入 4 輸出 true 解釋 先手玩家第一輪拿走乙個硬幣,此時還剩三個.這時無論後手玩家拿乙個還是兩...

lintcode 394 硬幣排成線

有 n 個硬幣排成一條線。兩個參賽者輪流從右邊依次拿走 1 或 2 個硬幣,直到沒有硬幣為止。拿到最後一枚硬幣的人獲勝。請判定 第乙個玩家 是輸還是贏?樣例n 1,返回 true.n 2,返回 true.n 3,返回 false.n 4,返回 true.n 5,返回 true.挑戰o 1 時間複雜度...

硬幣排成線

題目 有 n 個硬幣排成一條線。兩個參賽者輪流從右邊依次拿走 1 或 2 個硬幣,直到沒有硬幣為止。拿到最後一枚硬幣的人獲勝。請判定 先手玩家 必勝還是必敗?若必勝,返回 true,否則返回 false.樣例樣例 1 輸入 1 輸出 true 樣例 2 輸入 4 輸出 true 解釋 先手玩家第一輪...