题面

题目背景

有如下一个双人游戏:N(2 <= N <= 100)个正整数的序列放在一个游戏平台上,游戏由玩家1开始,两人轮流从序列的任意一端取一个数,取数后该数字被去掉并累加到本玩家的得分中,当数取尽时,游戏结束。以最终得分多者为胜。

题目描述

编一个执行最优策略的程序,最优策略就是使玩家在与最好的对手对弈时,能得到的在当前情况下最大的可能的总分的策略。你的程序要始终为第二位玩家执行最优策略。

输入输出格式

输入格式:

第一行: 正整数N, 表示序列中正整数的个数。

第二行至末尾: 用空格分隔的N个正整数(大小为1-200)。

输出格式:

只有一行,用空格分隔的两个整数: 依次为玩家一和玩家二最终的得分。

输入输出样例

输入样例#1:

6
4 7 2 9 5 2
输出样例#1:

18 11

说明

题目翻译来自NOCOW。

USACO Training Section 3.3

题解

首先它看起来像是一道博弈论,但是仔细分析,就会发现它不过是要求第二个人取数的和值最大

所以是一道区间取数的DP(没错我瞄了眼题解)

然后开始做题

蒟蒻的我还是naive的很,然后脑子一热就写下了以下的状态转移

\( dp[i][j] = max(dp[i+1][j]+a[i],dp[i][j-1]+a[j] ) \)

简直脑残(雾)

因为这是两个人取数,不是一个人拿数字,所以理所当然的就WA了

然后我们考虑到,在序列中,一个人拿完之后,另一个人会拿到其他的所有

所以让\( dp[i][j] \)表示先手在区间\( \left [ i,j \right ] \)的最大值

状态转移方程就变成了

\( dp[i][j]=max(sum[i][j]-dp[i+1][j],sum[i][j]-dp[i][j-1]) \)

然后前缀和随便搞一搞

A了QwQ

被这种题吊打,果然我还是太蒟蒻了

代码

#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
int dp[][],a[],sum[],n;
int main(){
scanf("%d",&n);
for(int i=;i<=n;i++)
scanf("%d",&a[i]),sum[i]+=sum[i-]+a[i];
for(int i=;i<=n;i++)
dp[i][i]=a[i];
for(int l=;l<=n;l++)
for(int i=;i+l-<=n;i++)
dp[i][i+l-]=sum[i+l-]-sum[i-]-min(dp[i+][i+l-],dp[i][i+l-]);
printf("%d %d",dp[][n],sum[n]-dp[][n]);
return ;
}

题解——洛谷P2734 游戏A Game 题解(区间DP)的更多相关文章

  1. 洛谷P2734 游戏 A Game

    P2734 游戏 A Game 27通过 60提交 题目提供者该用户不存在 标签USACO 难度普及+/提高 提交  讨论  题解 最新讨论 暂时没有讨论 题目背景 有如下一个双人游戏:N(2 < ...

  2. 洛谷——P2734 游戏 A Game

    P2734 游戏 A Game 题目背景 有如下一个双人游戏:N(2 <= N <= 100)个正整数的序列放在一个游戏平台上,游戏由玩家1开始,两人轮流从序列的任意一端取一个数,取数后该 ...

  3. 洛谷 P2734 游戏 A Game

    P2734 游戏 A Game 题目背景 有如下一个双人游戏:N(2 <= N <= 100)个正整数的序列放在一个游戏平台上,游戏由玩家1开始,两人轮流从序列的任意一端取一个数,取数后该 ...

  4. 洛谷 P1220 关路灯 (贪心+区间dp)

    这一道题我一直在想时间该怎么算. 看题解发现有个隐藏的贪心. 路径一定是左右扩展的,左右端点最多加+1(我竟然没发现!!) 这个性质非常重要!! 因此这道题用区间dp f[i][j]表示关完i到j的路 ...

  5. 洛谷 [P2734] 游戏

    博弈论+区间dp 有博弈论吗?大约只有一个博弈论的壳子 设 dp[i][j] 表示区间 i ~ j 先手最多能取多少, 它可以由 i ~ j - 1 与 i + 1 ~ j 来转移, 等于上述两个区间 ...

  6. 洛谷P2389 电脑班的裁员(区间DP)

    题目背景 隔壁的新初一电脑班刚考过一场试,又到了BlingBling的裁员时间,老师把这项工作交给了ZZY来进行.而ZZY最近忙着刷题,就把这重要的任务交(tui)给了你. 题目描述 ZZY有独特的裁 ...

  7. 【洛谷】P1063 能量项链【区间DP】

    P1063 能量项链 题目描述 在Mars星球上,每个Mars人都随身佩带着一串能量项链.在项链上有N颗能量珠.能量珠是一颗有头标记与尾标记的珠子,这些标记对应着某个正整数.并且,对于相邻的两颗珠子, ...

  8. 洛谷——1115 最大子段和(区间DP)

    题目描述 给出一段序列,选出其中连续且非空的一段使得这段和最大. 输入输出格式 输入格式: 输入文件maxsum1.in的第一行是一个正整数N,表示了序列的长度. 第2行包含N个绝对值不大于10000 ...

  9. 洛谷P1026 统计单词个数【区间dp】

    题目:https://www.luogu.org/problemnew/show/P1026 题意: 给定一个字符串,要求把他分成k段.给定s个单词,问划分成k段之后每段中包含的单词和最大是多少. 一 ...

随机推荐

  1. MyEclipse 黑色主题 jsp 页面 js背景色修改

    Windows-->Preferences-->Myeclipse-->Files and Editors-->JavaScript-->Editor-->Synt ...

  2. uvalive 11865 Stream My Contest

    题意: 有一个网络中心,和许多个城市,网络中心以及城市之间有若干条边,这些边有两个属性,最大带宽和修建费用. 现在要用最多不超过C的费用修建网络,使得每个城市都有网络连接,最大化最小带宽. 带宽限制是 ...

  3. Spark学习之路 (十四)SparkCore的调优之资源调优JVM的GC垃圾收集器

    一.概述 垃圾收集 Garbage Collection 通常被称为“GC”,它诞生于1960年 MIT 的 Lisp 语言,经过半个多世纪,目前已经十分成熟了. jvm 中,程序计数器.虚拟机栈.本 ...

  4. 抓取biqukan

    #python3.7 ''' 功能:实现www.biqukan.com/1_1094/5403177.html小说下载为txtv1.0 ''' import requests,sys,time fro ...

  5. 变量为空代表false

    name = ''#名字为空即代表False while not name:#not name=False即 真,将执行循环体 print('Enter your name:') name = inp ...

  6. springboot报错Whitelabel Error Page

    第一次使用springboot没有问题.隔了两天继续看.一直报错Whitelabel Error Page. 重新搭建试了任何方法都错了. 报的就是一个404错误,犯了一个习惯性错误,一般都是loca ...

  7. linux下卸载mysql(rpm)

    linux下卸载mysql 查看是否安装了mysql的组件 rpm –qa |grep –I mysql 卸载前关闭mysql服务 service mysql status service mysql ...

  8. 禁用HTTP.sys,导致80端口被禁用和IIS服务无法启动解决办法

    由于端口被占用,使用 win+r 运行 cmd 输入netstat -ano 可以看到端口被PIF 4占用,可以找到对应的进程NT kernel& System 该进程是Http.sys,是h ...

  9. Git从远程仓库里拉取一条本地不存在的分支方法

    Git从远程仓库里拉取一条本地不存在的分支方法 从远程仓库里拉取一条本地不存在的分支时,进入到对应目录先执行git fetch然后再执行git checkout -b 本地分支名 origin/远程分 ...

  10. PHP框架CI CodeIgniter 的log_message开启日志记录方法

    PHP框架CI CodeIgniter 的log_message开启日志记录方法 第一步:index.php文件,修改环境为开发环境define(‘ENVIRONMENT’, ‘development ...