題目詳情
一個雙人遊戲是這樣玩的:給定一個非負正整數序列,你每次只能從序列頭部取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的元素的和.
代碼如下: