题目大意就是有一个整数串,有两个人轮流取,每次可以取走一个前缀或后缀。两人都足够聪明,且都会使自己收益最大。求取完后先手比后手多多少。

  每次我看见上面那句就会深感自己的愚笨无知。

  所以来推推性质?

  1.两人取的和是一定的,所以只要先手收益尽量大就可以了,问题转化为求收益尽量大。

  2.对于一个区间(l,r),确定了先后手关系,因为两人都足够聪明,所以答案是确定的。

  3.因为每次都是从前面或后面取,所以不管怎么取,剩下的一定是一段连续的串。

  对于这种两人够聪明但我不聪明的问题,就把聪明丢给状态就可以了。

  直接设D(L,R)表示先手在当前串为[l,r]时聪明地选的最大收益。

  那么怎么转移呢?先手收益就是总和-后手收益,综合不变,就是要后手收益最小。

  因为后手在先手取完后转先手,所以状态转移就出来了。

  D(i,j)=Sum(i,j)-min(   (D(i+1,j),D(i+2,j),……,D(j,j))   ,   (D(i,j-1),D(i,j-2),……,D(i,i))   ,   0  )。

  其中前面是本次从左边取一段,中间是本次从右边取一段,后面是本次取完。

  这么写起来可以打记忆搜,复杂度是O(n^3)的,也跑得过去了。

  看着上面那个式子很想优化一下?

  设 f(i,j)=min(D(i,j),D(i+1,j),……,D(j,j)), g(i,j)=min(D(i,j-1),D(i,j-2),……,D(i,i))。

  则D(i,j)=min( min( f(i+1,j),g(i,j-1) ) , 0)。

  f和g的转移也很好做。

  f(i,j) = min ( f(i+1,j) , D(i,j) ),g(i,j) = min ( g(i,j-1) , D(i,j) )。

  于是就可以O(n^2)解决辣。

#include    <iostream>
#include <cstdio>
#include <cstdlib>
#include <algorithm>
#include <vector>
#include <cstring>
#include <queue>
#include <complex>
#include <stack>
#define LL long long int
#define dob double
#define FILE "10891"
using namespace std; const int N = ;
int n,f[N][N],g[N][N],D[N][N],S[N]; inline int gi(){
int x=,res=;char ch=getchar();
while(ch>''||ch<''){if(ch=='-')res*=-;ch=getchar();}
while(ch<=''&&ch>='')x=x*+ch-,ch=getchar();
return x*res;
} int main()
{
while(n=gi()){
memset(f,,sizeof(f));memset(g,,sizeof(g));
for(int i=;i<=n;++i)
S[i]=S[i-]+(D[i][i]=f[i][i]=g[i][i]=gi());
for(int len=;len<=n;++len)
for(int i=;i<=n;++i){
int j=i+len-;if(j>n)break;
D[i][j]=S[j]-S[i-]-min(,min(f[i+][j],g[i][j-]));
f[i][j]=min(f[i+][j],D[i][j]);
g[i][j]=min(g[i][j-],D[i][j]);
}
printf("%d\n",*D[][n]-(S[n]-S[]));
}
return ;
}

Game of Sum

UVA 10891 Game of Sum的更多相关文章

  1. 09_Sum游戏(UVa 10891 Game of Sum)

    问题来源:刘汝佳<算法竞赛入门经典--训练指南> P67 例题28: 问题描述:有一个长度为n的整数序列,两个游戏者A和B轮流取数,A先取,每次可以从左端或者右端取一个或多个数,但不能两端 ...

  2. uva 10891 Game of Sum(区间dp)

    题目连接:10891 - Game of Sum 题目大意:有n个数字排成一条直线,然后有两个小伙伴来玩游戏, 每个小伙伴每次可以从两端(左或右)中的任意一端取走一个或若干个数(获得价值为取走数之和) ...

  3. [题解]UVa 10891 Game of Sum

    在游戏的任何时刻剩余的都是1 - n中的一个连续子序列.所以可以用dp[i][j]表示在第i个数到第j个数中取数,先手的玩家得到的最大的分值.因为两个人都很聪明,所以等于自己和自己下.基本上每次就都是 ...

  4. UVa 10891 Game of Sum - 动态规划

    因为数的总和一定,所以用一个人得分越高,那么另一个人的得分越低. 用$dp[i][j]$表示从$[i, j]$开始游戏,先手能够取得的最高分. 转移通过枚举取的数的个数$k$来转移.因为你希望先手得分 ...

  5. UVa 10891 - Game of Sum 动态规划,博弈 难度: 0

    题目 https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&a ...

  6. UVA 10891 Game of Sum(区间DP(记忆化搜索))

    题目链接:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem ...

  7. UVA - 10891 Game of Sum 区间DP

    题目连接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=19461 Game of sum Description This ...

  8. UVA 10891 Game of Sum(DP)

    This is a two player game. Initially there are n integer numbers in an array and players A and B get ...

  9. 28.uva 10891 Game of Sum 记忆化dp

    这题和上次的通化邀请赛的那题一样,而且还是简化版本... 那题的题解      请戳这里 ... #include<cstdio> #include<algorithm> #i ...

随机推荐

  1. System.UnauthorizedAccessException 错误

    给目录添加 "Authenticated Users" 这个用户的 读写权限

  2. 机器学习算法--Perceptron(感知机)算法

    感知机: 假设输入空间是\(\chi\subseteq R^n\),输出空间是\(\gamma =\left( +1,-1\right)\).输入\(\chi\in X\)表示实例的特征向量,对应于输 ...

  3. 十六、Hadoop学习笔记————Zookeeper实战

    所有服务器都会先将自己的服务器信息注册到servers中,然后每台服务器都会尝试注册master,哪台注册成功,则哪台就是master服务器. 所有的服务器都会关注master节点的删除事件,这样通过 ...

  4. border-radio属性

    boreder-radio属性是css3的新增属性,可以设置圆角的边框. <head>  <style type="text/css"> *{ margin ...

  5. Less的Extend_Less继承

    Extend就相当于Java的继承,它允许一个选择器继承另一个选择器的样式.Extend有两种语法格式. 一种是: <selector>:extend(<parentSelector ...

  6. 第六届蓝桥杯软件类省赛题解C++/Java

    第六届蓝桥杯软件类省赛题解C++/Java 1[C++].统计不含4的数字统计10000至99999中,不包含4的数值个数.答:暴力循环范围内所有数字判断一下就是了,答案是52488 1[Java]. ...

  7. 解决阿里云服务器3306端口无法访问的问题(windows server 2008r2)

    3306端口一般是指mysql数据的默认端口.郁闷了几天的问题,远程无法连接服务器上的mysql服务.今天终于得到彻底解决. 首先,你要确保在服务器上安装好Mysql,并能本地启动.修改密码(如不知道 ...

  8. ThinkPHP中处理验证码不显示问题

    在调用验证码之前加上 ob_clean(); 不显示验证码的代码: public function verify(){               $Verify = new \Think\Verif ...

  9. 基于MySQL + Node.js + Leaflet的离线地图展示,支持百度、谷歌、高德、腾讯地图

    1. 基本说明 本项目实现了离线展示百度.谷歌.高德.腾讯地图.主要功能如下: 实现了地图瓦片图下载.存储.目前支持存储至MySQL Node.js服务调用MySQL中的瓦片图 Leaflet展示地图 ...

  10. 在没有DOM操作的日子里,我是怎么熬过来的(终结篇)

    前言 在我写终结篇的日子里,Vue版本稳定在2.9.1.当我摸清Vue的脉络之后,以一个爬坑无数的亲历者的身份,谈谈我在MVVM时代里遇到的那些事儿. 接下来,正文从这开始~ 好多童鞋学习Vue都有灯 ...