Little Hi and Little Ho are playing a game. There is an integer array in front of them. They take turns (Little Ho goes first) to select a number from either the beginning or the end of the array. The number will be added to the selecter's score and then be removed from the array.

Given the array what is the maximum score Little Ho can get? Note that Little Hi is smart and he always uses the optimal strategy.

Input

The first line contains an integer N denoting the length of the array. (1 ≤ N ≤ 1000)

The second line contains N integers A1, A2, ... AN, denoting the array. (-1000 ≤ Ai ≤ 1000)

Output

Output the maximum score Little Ho can get.

Sample Input

4
-1 0 100 2

Sample Output

99

官方题解 http://hihocoder.com/discuss/question/4984
 /*
问题 两人轮流从一个数组的头或者尾选择一个数累加,并且将其删除,问先手累加的数最大是能多少
抽象问题 由于每次只能从数组首/尾拿走一个数,所以小Hi和小Ho在任何时候面对的残局都只可能是一段连续的子数组A[i..j]。
变量 i j 最多能获得的得分,其中i,j表示区间端点下标
定义状态 我们不妨用f[i][j]表示当面对A[i..j],先手最多能获得的得分。
并且如果我们能计算出所有f[i][j]的值,那么显然f[1][n]就是最终答案。
状态转移
i=j时,f[i][j]=A[i];
i<j时,此时先手面临A[i...j],若取A[i],则后手面临A[i+1...j],最多能得f[i+1][j]分,那么先手当前得分为
区间和减去后手最多得分(其实此时的后手也是先手,因为都符合每次都作出最优选择的条件)
即sum(A[i...j]) - f[i+1][j];
同理,若先手取A[j],则为sum(A[i...j]) - f[i][j-1]; 接下来就是写代码了(废话),我想说的是,状态方程虽然列出来了,怎么用也是需要思考的
我的做法是推理,要想计算f[i][j]需要先计算f[i+1][j]和f[i][j-1]
容易看出,i需要递减循环,j需要递增循环
故得出代码如下
*/
#include<stdio.h>
int max(int x, int y){
return x > y ? x : y;
}
int min(int x, int y){
return x > y ? y : x;
}
int n,A[],sum[],f[][];//大数组开成全局
int main()
{
int i,j;
while(scanf("%d",&n) != EOF)
{
sum[]=;
for(i=;i<=n;i++){
scanf("%d",&A[i]);
sum[i] = sum[i-] + A[i];
}
for(i=n;i>=;i--){
for(j=;j<=n;j++){
if(i == j)
f[i][j]=A[i];
else if(i < j)
f[i][j]=sum[j] - sum[i-] - min(f[i+][j],f[i][j-]);
//f[i][j]=max(sum[j]-sum[i-1] - f[i+1][j],sum[j]-sum[i-1] - f[i][j-1]);
//i > j无需处理
}
}
printf("%d\n",f[][n]);
}
return ;
}


 

A Game(区间DP)的更多相关文章

  1. 【BZOJ-4380】Myjnie 区间DP

    4380: [POI2015]Myjnie Time Limit: 40 Sec  Memory Limit: 256 MBSec  Special JudgeSubmit: 162  Solved: ...

  2. 【POJ-1390】Blocks 区间DP

    Blocks Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 5252   Accepted: 2165 Descriptio ...

  3. 区间DP LightOJ 1422 Halloween Costumes

    http://lightoj.com/volume_showproblem.php?problem=1422 做的第一道区间DP的题目,试水. 参考解题报告: http://www.cnblogs.c ...

  4. BZOJ1055: [HAOI2008]玩具取名[区间DP]

    1055: [HAOI2008]玩具取名 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 1588  Solved: 925[Submit][Statu ...

  5. poj2955 Brackets (区间dp)

    题目链接:http://poj.org/problem?id=2955 题意:给定字符串 求括号匹配最多时的子串长度. 区间dp,状态转移方程: dp[i][j]=max ( dp[i][j] , 2 ...

  6. HDU5900 QSC and Master(区间DP + 最小费用最大流)

    题目 Source http://acm.hdu.edu.cn/showproblem.php?pid=5900 Description Every school has some legends, ...

  7. BZOJ 1260&UVa 4394 区间DP

    题意: 给一段字符串成段染色,问染成目标串最少次数. SOL: 区间DP... DP[i][j]表示从i染到j最小代价 转移:dp[i][j]=min(dp[i][j],dp[i+1][k]+dp[k ...

  8. 区间dp总结篇

    前言:这两天没有写什么题目,把前两周做的有些意思的背包题和最长递增.公共子序列写了个总结.反过去写总结,总能让自己有一番收获......就区间dp来说,一开始我完全不明白它是怎么应用的,甚至于看解题报 ...

  9. Uva 10891 经典博弈区间DP

    经典博弈区间DP 题目链接:https://uva.onlinejudge.org/external/108/p10891.pdf 题意: 给定n个数字,A和B可以从这串数字的两端任意选数字,一次只能 ...

  10. 2016 年沈阳网络赛---QSC and Master(区间DP)

    题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=5900 Problem Description Every school has some legend ...

随机推荐

  1. Python自动化开发 - 函数式编程

    本节内容 一.函数式编程 二.高阶函数 1.变量可以指向函数 2.函数名也是变量 3.传入函数 三.返回函数 1.函数作为返回值 2.闭包特性 一.函数式编程 函数是Python内建支持的一种封装,我 ...

  2. AngularJS指令封装高德地图组件

    1 概述 公司移动门户原来是基于AngularJS指令封装的百度地图组件,用于签到.签退.定位等功能,在使用过程中发现百度地图频繁的弹出广告,所以打算重新引用其它地图组件,最后决定基于AngularJ ...

  3. vue.js - 1

    最近开发公司vue前端项目,做一下笔记,偶尔上来查漏补缺 Vue指令之v-bind的三种用法 直接使用指令v-bind 使用简化指令: 在绑定的时候,拼接绑定内容::title="btnTi ...

  4. cad2016卸载/安装失败/如何彻底卸载清除干净cad2016注册表和文件的方法

    cad2016提示安装未完成,某些产品无法安装该怎样解决呢?一些朋友在win7或者win10系统下安装cad2016失败提示cad2016安装未完成,某些产品无法安装,也有时候想重新安装cad2016 ...

  5. webApp开发中的总结

    meta标签:  H5页面窗口自动调整到设备宽度,并禁止用户缩放页面 <meta name="viewport" content="width=device-wid ...

  6. CENTOS安装ElasticSearch(转)

    From: https://my.oschina.net/topeagle/blog/591451?fromerr=mzOr2qzZ CENTOS安装ElasticSearch ElasticSear ...

  7. odoo开发笔记:抛出警告的方式

    上边rase 加3种写法,都能实现,跑出警告的功能.

  8. Celery -- 分布式任务队列 及实例

    Celery 使用场景及实例 Celery介绍和基本使用 在项目中如何使用celery 启用多个workers Celery 定时任务 与django结合 通过django配置celery perio ...

  9. vs 2017 IIS EXPRESS 增加局域网访问

    在VS调试站点,默认使用IISExpress,locall+端口,为了使用IP地址.多域名调试,找到 IISExpress下的applicationhost.config,在目标站点下增加类似行: & ...

  10. linux 下 etc常用配置信息

    这些都是比较有实用性的系统配置,收藏下,以备不时之需!以下是etc下重要配置文件解释: 1./etc/hosts  #文件格式: IPaddress hostname aliases #文件功能: 提 ...