题目链接:https://nanti.jisuanke.com/t/48

题目描述

有如下一个双人游戏:N个正整数的序列放在一个游戏平台上,两人轮流从序列的两端取数,每次有数字被一个玩家取走后,这个数字被从序列中去掉并累加到取走该数的玩家的得分中,当数取尽时,游戏结束。以最终得分多者为胜。

编一个执行最优策略的程序,最优策略就是使自己能得到在当前情况下最大的可能的总分的策略。你的程序要始终为两位玩家执行最优策略。

输入第1行包括一个正整数N(2≤N≤100), 表示序列中正整数的个数。输入第2行包含用空格分隔的N个正整数(1≤所有正整数≤200)。

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

样例输入复制

6
4 7 2 9 5 2

样例输出复制

18 11

sum[i][j]表示从i位到j位所有的和,dp[i][j]表示从i位到j位使自身取到的所有值的最大和

想一下,先手要取掉两端中的一个值,此时无论先取者还是后取者都希望自己取的是最优的。

何为最优?

都保证自己会取得保证取完后总和相对大的,如何表示?

对于先手而言,

先取左边还是右边?当先手取完,就轮到后手去,后手一定会选择当前能令他得到最大分数的策略,其实当先手在[x, y]区间两端取走一个数,那么后手面临两个状态[x+1, y]和[x, y-1],先手想要取得最大值,一定会想让后手取这两种状态中的较小值,

即:dp[i][j]=sum[i][j]-min(dp[i+1][j],dp[i][j-1]),后半部分为后者所得和,前者所得和为总和减后者的和。。。。

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int a[105],sum[105][105],dp[105][105];
int main(){int n;scanf("%d",&n);for(int i=0;i<n;i++){scanf("%d",&a[i]);dp[i][i]=a[i];sum[i][i]=a[i];}for(int i=0;i<n;i++){for(int j=i+1;j<n;j++){sum[i][j]=sum[i][j-1]+a[j];}}for(int i=n-1;i>=0;i--){for(int j=i;j<n;j++){dp[i][j]=sum[i][j]-min(dp[i+1][j],dp[i][j-1]);}}printf("%d %d\n",dp[0][n-1],sum[0][n-1]-dp[0][n-1]);
}

取数游戏(博弈+动规)相关推荐

  1. 【每日DP】day 10、P1005 矩阵取数游戏【区间DP+高精(python)】难度⭐⭐⭐★

    P1005 矩阵取数游戏 输入 2 3 1 2 3 3 4 2 输出 82 说明/提示 NOIP 2007 提高第三题. 数据范围: 60%60\%60% 的数据满足:1≤n,m≤301\le n,m ...

  2. [CH Round #61] 取数游戏

    描述 SJY和CYF在玩一个取数游戏.他们将1~n分别写在n张纸上,随机排成一排,约定SJY先取,只能取走最边上的两张纸之一,然后CYF取:以此循环下去,取到1的人获胜.假设SJY和CYF足够聪明,求 ...

  3. P1005 矩阵取数游戏(__int128模板/简单dp)

    转跳P1005 题目描述 帅帅经常跟同学玩一个矩阵取数游戏:对于一个给定的 n \times mn×m 的矩阵,矩阵中的每个元素 a_{i,j}a i,j ​ 均为非负整数.游戏规则如下: 每次取数时 ...

  4. 【每日一题】7月10日精讲—矩阵取数游戏

    来源:牛客网: 文章目录 题目描述 题解: 代码: 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言524288K 64bit IO Format: %lld ...

  5. 【洛谷P1288】取数游戏II

    取数游戏II 题目链接 显然,由于一定有一个0,我们可以求出从初始点到0的链的长度 若有一条链长为奇数,则先手可以每次取完一条边上所有的数, 后手只能取另一条边的数,先手必胜: 反之若没有奇数链,后手 ...

  6. 洛谷1005 【NOIP2007】矩阵取数游戏

    问题描述 帅帅经常跟同学玩一个矩阵取数游戏:对于一个给定的n*m的矩阵,矩阵中的每个元素aij均为非负整数.游戏规则如下: 1.每次取数时须从每行各取走一个元素,共n个.m次后取完矩阵所有元素: 2. ...

  7. 【codevs1166】【noip07TG】矩阵取数游戏,新的开始

    1166 矩阵取数游戏 2007年NOIP全国联赛提高组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题解 题目描述 Description [问题描述] 帅帅经 ...

  8. CCF NOI100002 取数游戏

    问题链接:CCF NOI100002 取数游戏. 时间限制: 1000 ms  空间限制: 262144 KB 题目描述 我们来玩一个游戏:自然数1到N,按顺序列成一排,你可以从中取走任意个数,但是相 ...

  9. 洛谷P1005 矩阵取数游戏 ACM 大数+区间dp

    题目描述 帅帅经常跟同学玩一个矩阵取数游戏:对于一个给定的n \times mn×m的矩阵,矩阵中的每个元素a_{i,j}ai,j​均为非负整数.游戏规则如下: 每次取数时须从每行各取走一个元素,共n ...

  10. 【NOIP2007提高组】矩阵取数游戏

    题目背景 NOIP2007提高组试题3. 题目描述 帅帅经常跟同学玩一个矩阵取数游戏:对于一个给定的 n*m 的矩阵,矩阵中的每个元素 aij 均为非负整数.游戏规则如下: 1.每次取数时须从每行各取 ...

最新文章

  1. 腾讯信息流热点挖掘技术实践
  2. Android QQ、微信聊天消息界面设计原理与实现
  3. Linux进程间通讯之消息队列
  4. spoolsv.exe占cpu 99%的解决方法(转)
  5. 微信小程序图片选择,预览和删除
  6. linux 抓包工具_03-Python爬虫工程师-抓包工具
  7. 为什么你的数据库经常会被破防呢?原因原来是这——Sql注入问题(源码+文字深度解析)
  8. mysql查询周边商铺_利用Redis的Geo功能实现查找附近的店铺
  9. python的try和except_关于python:修复try和except中的无效语法错误
  10. 你是一名技术管理者还是项目管理者?
  11. css文件更新后浏览器网页仍然显示以前的页面解决方法
  12. java中的抽象工厂模式
  13. 北风网-Spark视频从入门到精通(高级特性、案例实战、内核源码、性能调优)-中华石杉老师
  14. 使用Mob工具实现QQ、微信、新浪微博登录
  15. 【数据结构(C语言版)严蔚敏 第一章 绪论】
  16. C# Word脚注和交叉引用功能
  17. python5_学习python5面向
  18. 来自阿里巴巴佛系Java程序员的指南,附项目源码
  19. 9行代码用python制作迷宫gif动画
  20. 服务端开发的实习总结

热门文章

  1. 如何用MATLAB优化投资组合的风险(方差)或得到投资组合的有效前沿
  2. 一个比较好的Java写的计算器代码
  3. @程序员,你需要点财商
  4. QT连接SQLServer并添加ODBC数据源
  5. 74HC09:四2输入与门(漏极开路输出)
  6. htmlCanvas2将html页面生成图片并下载
  7. 【收集】机器学习相关的比较好的博客
  8. Unity分辨率适配方案设置
  9. iOS 10 适配 ATS
  10. 号码吉凶算法+对照表