题解——洛谷P2734 游戏A Game 题解(区间DP)
题面
题目背景
有如下一个双人游戏:N(2 <= N <= 100)个正整数的序列放在一个游戏平台上,游戏由玩家1开始,两人轮流从序列的任意一端取一个数,取数后该数字被去掉并累加到本玩家的得分中,当数取尽时,游戏结束。以最终得分多者为胜。
题目描述
编一个执行最优策略的程序,最优策略就是使玩家在与最好的对手对弈时,能得到的在当前情况下最大的可能的总分的策略。你的程序要始终为第二位玩家执行最优策略。
输入输出格式
输入格式:
第一行: 正整数N, 表示序列中正整数的个数。
第二行至末尾: 用空格分隔的N个正整数(大小为1-200)。
输出格式:
只有一行,用空格分隔的两个整数: 依次为玩家一和玩家二最终的得分。
输入输出样例
- 6
- 4 7 2 9 5 2
- 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)的更多相关文章
- 洛谷P2734 游戏 A Game
P2734 游戏 A Game 27通过 60提交 题目提供者该用户不存在 标签USACO 难度普及+/提高 提交 讨论 题解 最新讨论 暂时没有讨论 题目背景 有如下一个双人游戏:N(2 < ...
- 洛谷——P2734 游戏 A Game
P2734 游戏 A Game 题目背景 有如下一个双人游戏:N(2 <= N <= 100)个正整数的序列放在一个游戏平台上,游戏由玩家1开始,两人轮流从序列的任意一端取一个数,取数后该 ...
- 洛谷 P2734 游戏 A Game
P2734 游戏 A Game 题目背景 有如下一个双人游戏:N(2 <= N <= 100)个正整数的序列放在一个游戏平台上,游戏由玩家1开始,两人轮流从序列的任意一端取一个数,取数后该 ...
- 洛谷 P1220 关路灯 (贪心+区间dp)
这一道题我一直在想时间该怎么算. 看题解发现有个隐藏的贪心. 路径一定是左右扩展的,左右端点最多加+1(我竟然没发现!!) 这个性质非常重要!! 因此这道题用区间dp f[i][j]表示关完i到j的路 ...
- 洛谷 [P2734] 游戏
博弈论+区间dp 有博弈论吗?大约只有一个博弈论的壳子 设 dp[i][j] 表示区间 i ~ j 先手最多能取多少, 它可以由 i ~ j - 1 与 i + 1 ~ j 来转移, 等于上述两个区间 ...
- 洛谷P2389 电脑班的裁员(区间DP)
题目背景 隔壁的新初一电脑班刚考过一场试,又到了BlingBling的裁员时间,老师把这项工作交给了ZZY来进行.而ZZY最近忙着刷题,就把这重要的任务交(tui)给了你. 题目描述 ZZY有独特的裁 ...
- 【洛谷】P1063 能量项链【区间DP】
P1063 能量项链 题目描述 在Mars星球上,每个Mars人都随身佩带着一串能量项链.在项链上有N颗能量珠.能量珠是一颗有头标记与尾标记的珠子,这些标记对应着某个正整数.并且,对于相邻的两颗珠子, ...
- 洛谷——1115 最大子段和(区间DP)
题目描述 给出一段序列,选出其中连续且非空的一段使得这段和最大. 输入输出格式 输入格式: 输入文件maxsum1.in的第一行是一个正整数N,表示了序列的长度. 第2行包含N个绝对值不大于10000 ...
- 洛谷P1026 统计单词个数【区间dp】
题目:https://www.luogu.org/problemnew/show/P1026 题意: 给定一个字符串,要求把他分成k段.给定s个单词,问划分成k段之后每段中包含的单词和最大是多少. 一 ...
随机推荐
- ReactiveCocoa(II)
RAC类关系图: RAC 信号源: 需要导入的头文件: import ReactiveCocoa import Result import ReactiveSwift 冷信号 //1.冷信号 let ...
- 算法训练 P1101
有一份提货单,其数据项目有:商品名(MC).单价(DJ).数量(SL).定义一个结构体prut,其成员是上面的三项数据.在主函数中定义一个prut类型的结构体数组,输入每个元素的值,计算并输出提货单的 ...
- 【Redis学习之六】Redis数据类型:集合和有序集合
环境 虚拟机:VMware 10 Linux版本:CentOS-6.5-x86_64 客户端:Xshell4 FTP:Xftp4 jdk8 redis-2.8.18 一.集合 Set无序的.去重的元素 ...
- 【impala学习之一】impala
环境 虚拟机:VMware 10 Linux版本:CentOS-6.5-x86_64 客户端:Xshell4 FTP:Xftp4 jdk8 CM5.4 一.ImpalaImpala是基于Hive的大数 ...
- FilenameFilter
Introduction: java.io.FileNameFilter is a interface which is for filtering by filename, if filename ...
- 创建 .m2 文件夹
首次使用 Maven 创建 .m2 文件夹 1. cmd2. mvn help:system
- sklearn异常检测demo
sklearn 异常检测demo代码走读 # 0基础学python,读代码学习python组件api import time import numpy as np import matplotlib ...
- interface接口——公共规范标准
黑马课程学习记录: 个人理解也可以看成一个类:源代码还是.java,编译后的字节文件还是.class 抽象类中可以含有普通成员方法,但是有抽象方法的必须是抽象类或者接口, 接口中只能含有抽象方法: 创 ...
- Linux基础命令---忽略挂起信号nohup
nohup nohup可以使程序能够忽略挂起信号,继续运行.用户退出时会挂载,而nohup可以保证用户退出后程序继续运行.如果标准输入是终端,请将其从/dev/null重定向.如果标准输出是终端,则将 ...
- GUI常用对象介绍3
%text hf = axes; ht = text(,,'示例'); get(ht); %公式 并且设置位置坐标 (积分符号) text('String','\int_0^x dF(x)','Pos ...