做遊戲

題目詳情

一個雙人遊戲是這樣玩的:給定一個非負正整數序列,你每次只能從序列頭部取1個、2個或者3個數,取到的整數累加到你的得分上。兩個人輪流如此,知道取完所有整數。每個人都足夠聰明,每個人的目的是最大化自己的得分,請問第一個人最終的得分是多少?

輸入格式

多組數據,每組數據第一行是一個正整數n,表示序列中數的個數。(n<=100000)

第二行是n個空格分隔的非負整數,表示每個數,每個數不超過1000000000。

輸出格式

表示你的最終得分



答題說明

輸入樣例  

5

1 1 1 100000 0

5

1 1 10000 0 10001

輸出樣例  

3

10002


思路: 動態規劃,不過要倒着來,即dp[i]表示第一個人從第i個元素開始取,最多能得到的分數(要注意呀,輸入

數據不是題目說的那麼回事,要用__int6來保存,我中槍了無數次,你呢?),那麼


dp[i] = max(array[i]+sum[i+1]-dp[i+1], array[i]+array[i+1]+sum[i+2]-dp[i+2], 

array[i]+array[i+1]+array[i+2]+sum[i+3]-dp[i+3])


其中sum[i]表示i到n的元素的和.


代碼如下:


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章