题意:

一个序列,选手 AAA、BBB 轮流从序列中从左端或者右端选一段区间,然后区间和加到自己的权值中。两个选手都会按照最优的方式进行选取,问先手 AAA 最多可以比 BBB 多拿多少。 (1≤n≤100)(1\leq n\leq 100)(1≤n≤100)


思路:

很明显这是一道 DPDPDP 问题,又因为只能从左端点或右端点拿,因此不难想到用区间 DPDPDP 的方法来解决此题。

既然是区间 DPDPDP,那么最常见的状态就是 DP[i][j]DP[i][j]DP[i][j] 表示对于区间 [i,j][i,j][i,j] ,先手最多领先后手多少。又因为区间和是一定的,因此已知选手 AAA 获得的价值就可以知道选手 BBB 获得的价值,因此修改状态为 DP[i][j]DP[i][j]DP[i][j] 表示区间 [i,j][i,j][i,j],先手最多可以获得多少价值。

因此 DP[i][j]=max(sum[i][j]−DP[x][j],sum[i][j]−DP[i][y]),i&lt;x,y&lt;jDP[i][j] = max(sum[i][j]-DP[x][j],sum[i][j]-DP[i][y]),i &lt; x,y &lt; jDP[i][j]=max(sum[i][j]−DP[x][j],sum[i][j]−DP[i][y]),i<x,y<j,由于 nnn 比较小,直接枚举区间长度,从小区间到大区间进行转移即可。


//UVA 10891
#include <cstdio>
#include <iostream>
#include <cstring>
#include <algorithm>
#define __ ios::sync_with_stdio(0);cin.tie(0);cout.tie(0)
#define rep(i,a,b) for(int i = a; i <= b; i++)
#define LOG1(x1,x2) cout << x1 << ": " << x2 << endl;
#define LOG2(x1,x2,y1,y2) cout << x1 << ": " << x2 << " , " << y1 << ": " << y2 << endl;
typedef long long ll;
typedef double db;
const db EPS = 1e-9;
using namespace std;
const int N = 200;int n,a[N],sum[N],dp[N][N];
//dp[i][j]: 表示区间[i,j]先手能够获得的最大价值int main()
{while(~scanf("%d",&n)){if(!n) break;memset(dp,0,sizeof dp);rep(i,1,n) scanf("%d",&a[i]);rep(i,1,n) sum[i] = sum[i-1]+a[i];rep(len,1,n)rep(i,1,n-len+1){int j = i+len-1;dp[i][j] = sum[j]-sum[i-1];rep(k,1,len-1){dp[i][j] = max(sum[j]-sum[i-1]-dp[i+k][j],dp[i][j]);dp[i][j] = max(sum[j]-sum[i-1]-dp[i][j-k],dp[i][j]);} }int ans = dp[1][n]-(sum[n]-sum[0]-dp[1][n]);printf("%d\n",ans);}return 0;
}

【UVA-10891】Game of Sum【区间DP】相关推荐

  1. 【UVA - 10891 Game of Sum 】【HRBUST - 1622】 Alice and Bob (区间dp,博弈问题)

    题干: 有一个长度为N的整数序列,Alice和Bob轮流取数,Alice先取.每次玩家只能从左端或者右端 取一个或多个数,但不能两端都取.所有数都被取走后游戏结束,然后统计每个人取走的所有数之和, 作 ...

  2. UVA 10891——Game of Sum

    题意:给定一个长度为n的序列,两个人分别从两端开始取若干数,但是规定要么左,要么右,问双方都采取最优策略下A的总和减去B的值. 思路:区间dp,dp(i,j)表示先手的总和,那么状态转移方程便为dp( ...

  3. [UVA 10891] Game of Sum

    图片加载可能有点慢,请跳过题面先看题解,谢谢 很容易想到这样一个状态: \(dp[l][r]\) 表示,\(l\) 到 \(r\) 这一段区间,双方都使用最优策略时,先手能得到的最大分数 $ $ 那么 ...

  4. uva 10891 - Game of Sum

    题解   白书上  总和一定的  dp 题:经典题 1 #include<iostream> 2 #include<stdio.h> 3 #include<cstring ...

  5. UVA 10003 Cutting Sticks (区间dp)

    题意: 给你一根木块,让你在n个点切块(不能改变顺序),使得总花费最小,看拿来切的那根木棍的长度. 代码: #include <map> #include <set> #inc ...

  6. Sticks UVA - 307(切木棍 线性区间dp,线性dp,区间思想。)

    题目大意:将n节木棒接成m个长度相等的木条,要求木条的长度尽可能的短 Time limit     3000 ms OS     Linux George took sticks of the sam ...

  7. UVa在线比赛单题汇总-----DP专题

    动态规划基础 例题 LA 3882 UVa 3882 - And Then There Was One 递推------------无力orz UVa 10635 10635 - Prince and ...

  8. 【LightOJ - 1031】Easy Game (区间dp,博弈)

    题干: You are playing a two player game. Initially there are n integer numbers in an array and player  ...

  9. hdu 4597 + uva 10891(一类区间dp)

    题目链接:http://vjudge.net/problem/viewProblem.action?id=19461 思路:一类经典的博弈类区间dp,我们令dp[l][r]表示玩家A从区间[l, r] ...

  10. 【区间dp】uva10003+ uva 1626 括号匹配问题 【有空自己记忆化写一下!!!】

    讲道理,其实我还不是太懂,这个题看到了两种写法 之前大概想的差不多,要这样实现呀: 常规写法,大概n--3 递归写法,稍微好理解一点 好了,接下来自从看了liuchuo的博客我要变身玛丽苏橙色了 题目 ...

最新文章

  1. 首个深度强化学习AI,能控制核聚变,成功登上《Nature》
  2. 宏基因组公众号7月精选文章目录
  3. 《研磨设计模式》chap23 职责链模式chainOfResponsibility(2)应用场景
  4. 内存或磁盘空间不足,Microsoft Office Excel 无法再次打开或保存任何文档。 [问题点数:20分,结帖人wenyang2004]...
  5. javascript --- XHR(XMLHttpRequet)对象
  6. 两端对齐布局与text-align:justify
  7. SQL SERVER 内存分配及常见内存问题(1)——简介
  8. 三星Galaxy Note 10系列机模曝光:开孔全面屏实锤
  9. LSTM block和cell区别
  10. 转载:::::简单分享一个轻量级自动化测试框架目录结构设计
  11. 微型计算机控制课程设计,《微型计算机控制技术》课程设计
  12. Xcode9.0、Xcode9.1修改模拟器尺寸
  13. 熊猫聚财独家揭秘-你不知道的避坑赚钱宝典
  14. waf怎么读_技术分享:杂谈如何绕过WAF(Web应用防火墙)
  15. Kubernetes 最新版本安装过程和注意事项
  16. 京东方数字艺术产业论坛:感受科技的艺术之美
  17. Qt编写百度地图综合应用(在线+离线+区域)
  18. 计算机网络(四)运输层(TCP/IP)
  19. Java实现的LU分解,高斯消去法求线性方程组的解
  20. python爬虫获取历史天气信息

热门文章

  1. 因为机遇,不会轻易悲伤
  2. whey some page need header when your fetch that page and some don't need
  3. 大型网站的架构设计问题----大型高并发高负载网站的系统架构[转]
  4. 云计算计算机二级,2021计算机二级office用的是哪个版本
  5. python测试用例不通过发送报告_python+unittest 多用例测试执行失败的问题
  6. tkinter 中给某个文本加上滚动条_python中wx模块的具体使用方法
  7. pat A1052:Linked List Sorting静态链表+链表排序
  8. 呆瓜半小时入门python数据分析_金融和生物信息学多个实战案例
  9. 0 y 100写成c语言,c语言100编程实例
  10. linux下ftp二进制传输,FTP的两种传输模式:BINARY和ASCII