取数游戏(博弈+动规)
题目链接: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]);
}
取数游戏(博弈+动规)相关推荐
- 【每日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 ...
- [CH Round #61] 取数游戏
描述 SJY和CYF在玩一个取数游戏.他们将1~n分别写在n张纸上,随机排成一排,约定SJY先取,只能取走最边上的两张纸之一,然后CYF取:以此循环下去,取到1的人获胜.假设SJY和CYF足够聪明,求 ...
- P1005 矩阵取数游戏(__int128模板/简单dp)
转跳P1005 题目描述 帅帅经常跟同学玩一个矩阵取数游戏:对于一个给定的 n \times mn×m 的矩阵,矩阵中的每个元素 a_{i,j}a i,j 均为非负整数.游戏规则如下: 每次取数时 ...
- 【每日一题】7月10日精讲—矩阵取数游戏
来源:牛客网: 文章目录 题目描述 题解: 代码: 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言524288K 64bit IO Format: %lld ...
- 【洛谷P1288】取数游戏II
取数游戏II 题目链接 显然,由于一定有一个0,我们可以求出从初始点到0的链的长度 若有一条链长为奇数,则先手可以每次取完一条边上所有的数, 后手只能取另一条边的数,先手必胜: 反之若没有奇数链,后手 ...
- 洛谷1005 【NOIP2007】矩阵取数游戏
问题描述 帅帅经常跟同学玩一个矩阵取数游戏:对于一个给定的n*m的矩阵,矩阵中的每个元素aij均为非负整数.游戏规则如下: 1.每次取数时须从每行各取走一个元素,共n个.m次后取完矩阵所有元素: 2. ...
- 【codevs1166】【noip07TG】矩阵取数游戏,新的开始
1166 矩阵取数游戏 2007年NOIP全国联赛提高组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题解 题目描述 Description [问题描述] 帅帅经 ...
- CCF NOI100002 取数游戏
问题链接:CCF NOI100002 取数游戏. 时间限制: 1000 ms 空间限制: 262144 KB 题目描述 我们来玩一个游戏:自然数1到N,按顺序列成一排,你可以从中取走任意个数,但是相 ...
- 洛谷P1005 矩阵取数游戏 ACM 大数+区间dp
题目描述 帅帅经常跟同学玩一个矩阵取数游戏:对于一个给定的n \times mn×m的矩阵,矩阵中的每个元素a_{i,j}ai,j均为非负整数.游戏规则如下: 每次取数时须从每行各取走一个元素,共n ...
- 【NOIP2007提高组】矩阵取数游戏
题目背景 NOIP2007提高组试题3. 题目描述 帅帅经常跟同学玩一个矩阵取数游戏:对于一个给定的 n*m 的矩阵,矩阵中的每个元素 aij 均为非负整数.游戏规则如下: 1.每次取数时须从每行各取 ...
最新文章
- 腾讯信息流热点挖掘技术实践
- Android QQ、微信聊天消息界面设计原理与实现
- Linux进程间通讯之消息队列
- spoolsv.exe占cpu 99%的解决方法(转)
- 微信小程序图片选择,预览和删除
- linux 抓包工具_03-Python爬虫工程师-抓包工具
- 为什么你的数据库经常会被破防呢?原因原来是这——Sql注入问题(源码+文字深度解析)
- mysql查询周边商铺_利用Redis的Geo功能实现查找附近的店铺
- python的try和except_关于python:修复try和except中的无效语法错误
- 你是一名技术管理者还是项目管理者?
- css文件更新后浏览器网页仍然显示以前的页面解决方法
- java中的抽象工厂模式
- 北风网-Spark视频从入门到精通(高级特性、案例实战、内核源码、性能调优)-中华石杉老师
- 使用Mob工具实现QQ、微信、新浪微博登录
- 【数据结构(C语言版)严蔚敏 第一章 绪论】
- C# Word脚注和交叉引用功能
- python5_学习python5面向
- 来自阿里巴巴佛系Java程序员的指南,附项目源码
- 9行代码用python制作迷宫gif动画
- 服务端开发的实习总结