【題目描述】
There are n coins with different value in a line. Two players take turns to take one or two coins from left side until there are no more coins left. The player who take the coins with the most value wins.
Could you please decide the?first?player will win or lose?
【題目鏈接】
www.lintcode.com/en/problem/coins-in-a-line-ii/
【題目解析】
定義dp[i]表示從i到end能取到的最大值
當我們在i處,有兩種選擇:
1.若取values[i],對方可以取values[i+1] 或者values[i+1] + values[i+2]
當對方取values[i+1] 后 ,我們只能從 i+2 到end內取,我們所取得最大值是dp[i+2],注意:對方所選取的結果一定是使得我們以后選取的值最小
當對方取values[i+1] + values[i+2]后,我們只能從i+3到end內取,我們所取得最大值是dp[i+3]。
此時:dp[i] = values[i] + min(dp[i+2],dp[i+3]) ,注意:對方所選取的結果一定是使得我們以后選取的值最小
2.若取values[i] + values[i+1],對方可取values[i+2] 或者values[i+2] + values[i+3]
當對方取values[i+2]后,我們只能從i+3到end內取,我們取得最大值是dp[i+3]
當對方取values[i+2]+values[i+3]后,我們只能從i+4到end內去,我們取得最大值是dp[i+4]
此時:dp[i] = values[i] + values[i+1]+min(dp[i+3],dp[i+4])
這里的取最小值和上面一樣的意思,對方選取過之后的值一定是使得我們選取的值最小,對方不傻并且還很聰明
最后我們可以取上面兩個dp[i]的最大值,就是答案,這里意思是:對方留得差的方案中,我們選取的最大值。
【參考答案】