做游戏

来源:互联网 发布:snk mac 模拟器 编辑:程序博客网 时间:2024/04/29 15:33
题目详情

一个双人游戏是这样玩的:给定一个非负正整数序列,你每次只能从序列头部取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的元素的和.


代码如下:


0 0
原创粉丝点击