博弈论之双人取数游戏详解

双人游戏问题  有如下一个双人游戏:N个正整数的序列放在一个游戏平台上,两个人轮流从序列的两端取数,取数后该数字被去掉并累加到本玩家的得分中,当数取尽时,游戏结束,以最终的分多者为胜利。编写一个执行最优策略的程序,最优策略就是使得自己能在当前情况下得到最优策略。要求程序要始终为第二位玩家执行最优策略。 该题目的动态规划方程是: 设sum(s,t)为区间s,t中的数字和,gain(s,t)为按照最优策略能获得... 阅读详情

描述

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

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

格式

PROGRAM NAME: game1

INPUT FORMAT:

(file game1.in)

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

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

OUTPUT FORMAT:

(file game1.out)

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

SAMPLE INPUT

6 
4 7 2 9 5 2

SAMPLE OUTPUT

18 11

思路:用递归会看起来清晰一点,定义一个dfs方法,返回如果取区间ns第i到第j个数时的最大值。

这里我就单纯递归,可以自己加一个记忆数组提高效率

public class 双端取求游戏 {
	
	static int[][] sum = new int[1000][1000];//储存ns内的各区间和,sum[0][3]表示第0到第3个数的和 
	static int[] ns = new int[]{4,7,2,9,5,2};//能取的数
	
	/*用处: 得到ns区间中第i到j个数先手能拿到的最大值 */
	static int dfs(int i,int j){
		if (i==j) {//如果只有一个数,返回他本身
			return ns[i]; 
		}
		if (Math.abs(i-j)==1) {//如果是两个数的局面,先手的取那个大的就行了
			return Math.max(ns[i],ns[j]);
		}
/*		大于两个数的局面,先手试探取首数和尾数后把子局面扔给下一个人,从两个子局面中挑一个分数大的
		sum[i+1][j] - dfs(i+1, j)+ns[i] 是取完左边的数后能获得的最大值
		sum[i][j-1] - dfs(i, j-1)+ns[j] 是取完右边的数后能获得的最大值
		先手把子局面交给后手后,先手得到的分应该是区间总和-子局面中先手获得的分+取的首数或尾数
		*/
		return Math.max(sum[i+1][j] - dfs(i+1, j)+ns[i], sum[i][j-1] - dfs(i, j-1)+ns[j]);
	}
	
	//初始化sum数组
	static void initSum(){
		for (int i = 0; i < ns.length; i++) {
			int tmp = 0;
			for (int j = i; j < ns.length; j++) {
				tmp += ns[j];
				sum[i][j] = tmp;
			}
		}
	}
	
	public static void main(String[] args) {
		initSum();
		System.out.println(dfs(0, 5)+" " + (sum[0][5]-dfs(0, 5)));
		
	}

}

通用算法 - [博弈论] - 双人取数游戏 1、问题描述 给定一个数组nums,a、b两人轮流从数组的左端或右端取一个数作为自己的得分,假设两人足够聪明,都采用最优的策略取数,且a先取,问a能能拿到的最大的分数是多少? 示例: 输入:nums=[4,7,5,3] 输出:10 解释:a能拿到的最大分数为7+3=10. 2、解题思路 分析:由题意,我们可以明确以下几点: (1) 当选手aaa、bbb在子数组nums[i,...,j]nums... 阅读详情

相关推荐

1、经典博弈论与量子博弈论基础

本文介绍了经典博弈论与量子博弈论的基础知识及其应用。从经典博弈论中的双人博弈(如囚徒困境、鹰鸽博弈、Samaritan困境、性别大战和匹配硬币博弈)出发,详细分析了不同博弈类型的纳什均衡和社会福利解,并探讨了帕累托有效结果的特点。同时,文章重点阐述了量子博弈论的兴起与发展,包括其核心方法EWL协议、量子化博弈的实现方式以及潜在应用领域。此外,还讨论了量子噪声、量子记忆、相对论效应等因素对量子博弈的影响,并对经典相关博弈、特殊情况下的博弈进行了分析。最后,展望了量子博弈论的未来发展方向及其在经济、生物等领域的

hadoop5ranger的博客 214

线性dp [USACO3.3]游戏 A Game(洛谷 P2734)

[USACO3.3]游戏 A Game 题目背景 有如下一个双人游戏:N(2 <= N <= 100)个正整数的序列放在一个游戏平台上,游戏由玩家1开始,两人轮流从序列的任意一端取一个数,取数后该数字被去掉并累加到本玩家的得分中,当数取尽时,游戏结束。以最终得分多者为胜。 题目描述 编一个执行最优策略的程序,最优策略就是使玩家在与最好的对手对弈时,能得到的在当前情况下最大的可能的总分的策略。你的程序要始终为第二位玩家执行最优策略。 题目看上去像博弈论的题目,但是其实不是,是一道线性dp题,转移

不知所云的博客 633

SRC漏洞挖掘实战指南:从零入门到月入过万的网络安全副业

网络安全的核心在于识别和修复系统缺陷,其中逻辑漏洞与信息泄露是常见的安全风险。其原理在于应用程序在业务逻辑设计或数据处理过程中存在缺陷,导致未授权访问或敏感数据暴露。掌握这些技术对于构建安全的应用体系至关重要,不仅能有效防范攻击,也为安全研究人员提供了将技术能力变现的合法途径。在漏洞赏金(Bug Bounty)和SRC(安全应急响应中心)等应用场景中,白帽子通过系统化的测试方法,挖掘此类漏洞,既能获得经济回报,又能积累宝贵的实战经验。本文聚焦于逻辑漏洞与信息泄露的实战挖掘技巧,为初学者提供清晰的入门路径和效

weixin_28568819的博客 351

多重均衡与制度和文化(博弈论入门学习笔记三)

0 多重均衡        考虑选数游戏:选择男女两位同学参加游戏,两位同学同时从1到10十个数字中任意选择5个。如果两人选择的数字没有任何重复,则每人获得50元奖励;不然两人什么都得不到。实验重复了三次,结果如下:         从这个例子容易看出,他们的三次选择都不构成纳什均衡。但原因并不是这个博弈没有纳什均衡,而是因为这个博弈有太多的纳什均衡。这就是博弈论中的多重均衡问题。     ...

stepho的博客 5886

加速度计解算姿态角

姿态角(欧拉角) 欧拉角主要用于描述刚体在固定三维参考坐标系下由于绕三轴任意旋转而形成的姿态角,具体描述参看欧拉角说明 图中xyz为固定参考系坐标,XYZ为刚体自有坐标系 (假定右手定则,即大拇指指向某一轴正方向,握拳是其余手指的转动方向为姿态角变化的正方向),则定义 绕固定坐标系的z轴旋转:航向角yaw, 转动 y 角度 绕固定坐标系的y轴旋转:俯仰角pitch,转动p 角度 绕固定坐标系的x轴旋转:横滚角roll, 转动r 角度 可以看出欧拉角或者姿态角是相对各个轴的角度偏移,再假定旋转的顺规为Z

卢平光的博客 1万+

保姆级教程:不用看古早代码,5分钟搞懂泛微ecology9附件存储与接口调用

本文详细解析了泛微ecology9附件存储与接口调用的核心原理,提供从基础概念到实战操作的完整指南。通过拆解文档化附件设计理念、解析RESTful接口参数,并给出Python代码示例,帮助开发者快速掌握附件上传与业务集成的关键技巧,提升二次开发效率。

weixin_28688385的博客 351

两端取数游戏的高效解法与随机情况下的特殊变式(博弈论?贪心)

两端取数游戏: 一个数列aaa 每次只能取出两端的数,先后手互换。 1.博弈版本:数字和大者胜,求先手必胜策略。 首先在∣a∣≡1(mod2)|a| \equiv 1 \pmod 2∣a∣≡1(mod2)时是不一定赢的。 比如:7 9 3 5 2 可以发现先手是必输的。 然后在2∣∣a∣\small2 \large| \small|a|2∣∣a∣时, 可以选第一个,然后对方只能选第2或n个。 发现...

Freopen的博客 1366

从示波器波形看懂CAN/RS485/RS422:一个TVS管放错位置,通信全挂的教训

本文通过示波器波形分析,深入探讨了CAN/RS485/RS422通信系统中TVS管布局错误的故障诊断与解决方案。文章详细解析了错误布局导致的波形特征,如信号钳位、阻抗失配等,并提供了正确的保护电路设计方案和终端匹配技术,帮助工程师快速定位和解决通信故障。

weixin_30555515的博客 347

CodeForces 299 C.Weird Game(博弈论)

Description 两个长度为2n的01串,两个人轮流开始取数字,每次只能取两个人之前都没取过的位置的数字,n次后两个人就得到了两个长度为n的数字,谁的数字大谁赢,两个人足够机智,问是先手必胜还是后手必胜还是平局 Input 第一行一整数n,之后两个长度为2n的01串(1<=n<=1e6) Output 如果先手必胜则输出First,如果后手必胜则输出Second,如果平局则输出Dra

ZSQ 982

BlenderGis安装碰到问题,ImageIO、无法点击和地图不加载

BlenderGis安装碰到问题,ImageIO、无法点击和地图不加载问题

qq_45176349的博客 4966

QQ也能连接OpenClaw啦!手机QQ远程操控本地AI保姆级教程

2026年最新OpenClaw与QQ连接教程发布,支持手机远程操控本地AI。腾讯官方推出QQ Bot插件,无需服务器即可实现三步绑定。教程提供三种连接方案:新手首选的扫码连接(10分钟搞定)、稳定的QQ群机器人方案,以及公网接入方案。详细步骤包括版本更新、插件安装、扫码绑定和功能测试,并附常见问题解决方案。该功能让用户通过QQ指令即可实现文件整理、文档生成等电脑操作,真正实现"手机发指令,电脑自动干"。

通俗易懂学IT 593

C++游戏game | 井字棋游戏坤坤版(配资源+视频)【赋源码,双人对战】

C++知识精讲16 | 井字棋游戏(配资源+视频)【赋源码,双人对战】

Yu仙笙的博客 7897

【Docker】常见容器问题解决#OCI runtime create failed: container_linux.go:349: starting container process

ERROR: for nginx Cannot start service nginx: OCI runtime create failed: container_linux.go:349: starting container process caused "process_linux.go:449: container init caused \"rootfs_linux.go:58: mounting \\\"/data/docker-compose/n

liu_chen_yang的博客 5529

acm-博弈论基础知识点详细总结(含证明推导分析)

引言 本文主要介绍acm中有关博弈论的基础知识点,意在梳理博弈论学习的总体框架与基本逻辑,使读者和作者都能够对博弈论的思维方式有更深入的理解。 博弈论:引言巴什博奕尼姆博弈及其扩展普通尼姆博弈anti-nim和游戏(反尼姆博弈)nim-k博弈其他扩展尼姆博弈SG函数及其应用威佐夫博弈斐波拉契博弈总结 巴什博奕 问题:有两个绝顶聪明的人在玩取石子游戏,假设最初有n个石子,每人可以轮流取1~m范围内的石子,如果没有石子可取就失败,问先手胜还是后手胜。 巴什博奕属于博弈论中最基础的问题,但从该问题我们往往

qq_30361651的博客 2403

由ip地址和子网掩码求网络号、主机号、广播地址(超详细)

1、用二进制数表示IP地址   在进行计算之前,我们首先要学会十进制的IP地址怎么转换为二进制的IP地址。   给出一个例子: 十进制:172.16.25.3 二进制:10101100.00010000.00011001.00000011 1、如果两台主机的网络号相同,我们就说它们是同一网段 2、主机号的意义 - 1)主机号部分全变成1,即为该网段的广播地址 - 2)主机号部分全变成0,即为该网段的网路地址(网络号) 3、如果主机号部分为x位,则该网络能容纳最大主机数为: 2的x次方-2。减2

爱吃雪糕的小布丁的博客 9万+

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

BZOJ 1188 分裂游戏 (博弈论)

1188: [HNOI2007]分裂游戏Time Limit: 10 Sec Memory Limit: 162 MB Description聪聪和睿睿最近迷上了一款叫做分裂的游戏。 该游戏的规则试: 共有 n 个瓶子, 标号为 0,1,2…..n-1, 第 i 个瓶子中装有 p[i]颗巧克力豆,两个人轮流取豆子,每一轮每人选择 3 个瓶子。标号为 i,j,k, 并要保证 i < j , j <

w4149 638

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

博弈论问题

** 博弈论问题——双人取自己 ** 1.问题描述 一共有19枚棋子,两人轮流取,每人每次可以取1枚或2枚或3枚,己方先取,拿到最后一枚棋子算输,问何种取法可以保证己方获胜。 2.分析过程及答案 博弈论问题的精髓在于控制局面,但是先手是无法控制的,这个问题看似先手,实则可以看成第一次取了以后的后手。 每人每次可以取1枚或2枚或3枚,那么两人一轮最少可以取2枚,最多6枚,但是为了控制局面,一定要根据...

Harold_96_lxw的博客 4万+

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

取数游戏【dp+博弈】

有如下一个双人游戏:N个正整数的序列放在一个游戏平台上,两人轮流从序列的两端取数,每次有数字被一个玩家取走后,这个数字被从序列中去掉并累加到取走该数的玩家的得分中,当数取尽时,游戏结束。以最终得分多者为胜。 编一个执行最优策略的程序,最优策略就是使自己能得到在当前情况下最大的可能的总分的策略。你的程序要始终为两位玩家执行最优策略。 输入第1行包括一个...

weixin_34112900的博客 159

acwing 博弈论之Nim游戏

给定 n 堆石子,两位玩家轮流操作,每次操作可以从任意一堆石子中拿走任意数量的石子(可以拿完,但不能不拿),最后无法进行操作的人视为失败。 问如果两人都采用最优策略,先手是否必胜。 输入格式 第一行包含整数 n。 第二行包含 n 个数字,其中第 i 个数字表示第 i 堆石子的数量。 输出格式 如果先手方必胜,则输出 Yes。 否则,输出 No。 数据范围 1≤n≤1e5, 1≤每堆石子数≤1e9 输入样例: 2 2 3 输出样例: Yes 这是一个博弈论 首先需要了解

拥抱技术 2342

洛谷P4459/loj#2511 [BJOI2018]双人猜数游戏(博弈论)

题面 传送门(loj) 传送门(洛谷) 题解 所以博弈论的本质就是爆搜么…… 题解 //minamoto #include<bits/stdc++.h> #define R register #define pi pair<int,int> #define fi first #define se second #define IT vector<int>::it...

weixin_34080571的博客 261

Yale开放课程博弈论5

接着上节课讲到的纳什均衡,这节课一直在weiz

退而结网 912

博弈论实用原理浅谈及题目实战【算法竞赛】

本篇记录博弈论一些常见原理、做题技巧。之前没有了解学习过博弈论,这篇文章可以当作记录学习笔记了。

weixin_73074505的博客 2322

1664:【例 2】取石子游戏 2(博弈)

1664:【例 2】取石子游戏 2 时间限制: 1000 ms 内存限制: 524288 KB 提交数: 225 通过数: 116 【题目描述】 有一种有趣的游戏,玩法如下: 玩家: 2 人; 道具: N 堆石子,每堆石子的数量分别为 X1,X2,…,Xn ; 规则: 1、游戏双方轮流取石子; 2、每人每次选一堆石子,并从中取走若干颗石子(至少取 1 颗); 3、所有石子被...

Aimer的博客 1888

LUOGU 2734 游戏 A Game [区间DP+博弈论]

2734 游戏 A Game 题目背景 有如下一个双人游戏:N(2 &lt;= N &lt;= 100)个正整数的序列放在一个游戏平台上,游戏由玩家1开始,两人轮流从序列的任意一端取一个数,取数后该数字被去掉并累加到本玩家的得分中,当数取尽时,游戏结束。以最终得分多者为胜。 题目描述 编一个执行最优策略的程序,最优策略就是使玩家在与最好的对手对弈时,能得到的在当前情况下最大的可能的总分的策...

Janice_zh的博客 280

博弈论学习笔记1

之前做博弈论的题目只是在网上搜公式,并没有从原理上理解。借本次复习beizhan

Cats can code. 1319
上一篇: 解决新版树莓派无法开启CSI接口摄像头问题
下一篇: 蓝桥杯之承压计算
白学家Lynn
博客等级 码龄10年 66粉丝 57原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值