3.6 多边形游戏

news2024/11/16 7:27:28

 


 

  • 博主简介:一个爱打游戏的计算机专业学生
  • 博主主页: @夏驰和徐策
  • 所属专栏:算法设计与分析

1.什么是多边形游戏? 

对于多边形游戏,一种特定类型的玩法,即在给定的简单多边形上进行移动、删除顶点或边,并根据规则计算得分的游戏。这类游戏可以涉及到不同的规则和目标,具体的玩法可能有所不同,但其基本思想是根据给定的操作方式,通过选择和移动顶点或边,使得得分最高。

在这类游戏中,玩家需要仔细观察多边形的形状和特征,并根据规则进行决策。常见的操作可能包括选择一个顶点或边,将其移动到新的位置,或者删除它,然后重新计算得分。得分的计算方式可能与多边形的属性有关,比如边长、角度、对称性等。玩家需要根据规则进行合理的选择和操作,以使得得分最高。

这类多边形游戏可以提供一种锻炼逻辑思维和问题解决能力的机会,同时也能够增强对数学概念的理解和运用。玩家需要分析多边形的特征,并基于自己的判断和策略进行操作,以达到最优解或最高得分。这样的游戏既能够带来娱乐乐趣,又能够促进数学思维的发展。

 

2.怎么证明最优子结构?

我的理解:

这段证明的主要目的是展示多边形游戏问题满足最优子结构性质。为了说明这一点,作者通过具体的描述和推理,给出了关于链的合并和分割的情况,并证明了子链的最优性与主链的最优性之间的关系。

在证明中,给定了一个顺时针序列的多边形,其中包含了顶点和边的信息。链表示从某个顶点开始的一段顺时针的路径,用来表示游戏中的一种操作序列。作者通过将链分割为两个子链,并定义了最小值和最大值的概念来讨论链的合并方式和计算结果。

根据作者的定义,对于主链和子链的合并方式以及对应的计算结果,存在最小值和最大值。在某些情况下,最小值和最大值可以由子链的最小值和最大值得到,而在其他情况下,最小值和最大值则需要通过比较不同子链的值来确定。作者通过这些推理和比较的过程,说明了主链的最优性与子链的最优性之间的关系。

综上所述,通过分析链的合并和分割的方式以及计算结果的最小值和最大值,作者证明了多边形游戏问题满足最优子结构性质。这意味着可以使用动态规划等算法来解决多边形游戏问题,并通过组合子问题的最优解来得到整个问题的最优解。

 具体的说:

在这个证明中,我们需要证明多边形游戏问题具有最优子结构性质。下面是证明的具体过程和思路:

1. 首先,我们需要定义一些符号和术语:
   - Op1, ML1, op12, 2121, opl7, HU7:这些表示多边形中的顶点和边的顺时针序列,其中opl表示第i条边对应的运算符,以m表示第i个顶点上的数值。
   - p(i, s):表示从顶点i开始长度为s的顺时针链,用来表示游戏中的一种操作序列。

2. 我们考虑将链p(i, s)在oplits]处分割为两个子链p(i, t)和p(t+1, s),其中t为oplits]对应的位置。
   - 这样的分割可以得到两个子问题,分别是对子链p(i, t)和p(t+1, s)进行合并的最优解。
   - 设子链p(i, t)的任意一种合并方式得到的值为m1,a和b分别是所有可能合并方式得到的最小值和最大值。
   - 同样地,设子链p(t+1, s)的任意一种合并方式得到的值为m2,c和d分别是所有可能合并方式得到的最小值和最大值。

3. 我们需要证明两种情况下的最优子结构性质:
   - 当oplits]为正运算符时:
     - 我们观察到m1的最小值和最大值都必须小于等于m2的最小值和最大值,即a ≤ m1 ≤ b,c ≤ m2 ≤ d。
     - 这意味着通过主链p(i, s)的最优解可以推导出子链p(i, t)和p(t+1, s)的最优解,且最大值对应最大子链的最大值,最小值对应最小子链的最小值。

   - 当oplits]为负运算符时:
     - 这种情况下,我们无法保证子链的最大值相乘能得到主链的最大值。
     - 但是,最大值仍然会出现在边界点上,即min{ac, ad, bc, bd} ≤ m ≤ max{ac, ad, bc, bd}。
     - 这意味着主链的最大值和最小值可以由子链的最大值和最小值得到,虽然最大值不一定是子链的最大值的乘积,最小值不一定是子链的最小值的乘积。

4. 综上所述,通过对链的分割和合并方式以及计算结果的最小值和最大值进行推理和比较,我们可以得出结论:多边形游戏满足最优子结构性质

 

 3.递归方程的推导

 

 4.算法描述

void MinMax(int n,int i,int s,int j,int& minf,int& maxf)
{
	int e[4];
	int a=m[i][s][0],b[i][s][1],r(i+s-1)%n+1,c=m[r][j-s][0],d=m[r][j-s][1]
	if(op[r]=='t');
	{
		minf=a+c;
		maxf=b+d;
	}
	else 
	{
		e[1]=a+c;
		e[2]=a*d;
		e[3]=b*c;
		e[4]=b*d;
		minf=e[1];
		maxf=e[1];
		for(int r=2;r<5;r++)
		{
			if(minf>e[r])
			{
				minf=e[r];
			}
			if(maxf<e[r])
			{
				max=e[r];
			}
		}
	}
	int PolyMax(int n)
	{
		int minf,maxf;
		for(int j=2;j<=n;j++)
		{
			for(int i=1;i<=n;i++)
			{
				for(int s=1;s<j;s++)
				{
					MinMax(n,i,s,j,minf,maxf,m,op)
					if(m[i][j][0]>minf)
					{
						m[i][j][0]=minf;
					}
					if(m[i][j][1]<maxf)
					m[i][j][1]=maxf; 
				}
			}
		}
		int temp=m[1][n][1];
		for(int i=2;i<=n;i++)
		{
			if(temp<m[i][n][1])
			{
				temp=m[i][n][1]
			}
		}
	}
	return temp;
}

我的理解:

这段代码是用来求解多边形游戏中的最优得分的函数。函数名为MinMax,接受一些参数,包括多边形顶点个数n、起始位置i、子链长度s、结束位置j,以及引用类型的最小值minf和最大值maxf。

代码首先声明了一个大小为4的整型数组e,用于存储计算得到的四种情况下的得分。接下来,根据给定的多边形顶点和边的索引,获取对应的得分值a、b、c、d。

代码中使用了条件语句判断当前操作符是否为't',根据操作符的不同选择不同的计算方式。如果操作符为't',则直接将最小值minf设置为a+c,最大值maxf设置为b+d。否则,通过四种情况下的计算,将得分分别存储到数组e中,并更新最小值minf和最大值maxf。

代码中使用了一个循环遍历数组e,找到最小值和最大值,并将其赋值给minf和maxf。

接下来,代码定义了一个名为PolyMax的函数,用于计算多边形游戏的最优得分。函数内部有一个嵌套的循环结构,用于遍历所有可能的子链长度和位置,并调用MinMax函数计算得分。然后,将得到的最小值和最大值更新到对应的数组m中。

最后,代码通过一个循环找到最终结果的最大值,并将其返回。

总体来说,这段代码是通过遍历和计算得分来求解多边形游戏中的最优结果。它使用了动态规划的思想,通过存储中间结果并利用最优子结构性质,避免了重复计算,从而提高了计算效率。

5.时间复杂度

O(n^3)

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/605378.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[图表]pyecharts-3D柱状图

[图表]pyecharts-3D柱状图 先来看代码&#xff1a; import randomfrom pyecharts import options as opts from pyecharts.charts import Bar3D from pyecharts.faker import Fakerdata [(i, j, random.randint(0, 12)) for i in range(6) for j in range(24)] c (Bar3D().…

box-shadow盒子阴影几种用法

box-shadow盒子阴影 语法&#xff1a; 外阴影&#xff1a;box-shadow: X轴 Y轴 Rpx color; 属性说明&#xff08;顺序依次对应&#xff09;&#xff1a; 阴影的X轴(可以使用负值) 阴影的Y轴(可以使用负值) 阴影模糊值&#xff08;大小&#xff09; 阴影的颜色 内阴…

【Linux】LAMP框架的架构与环境配置

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 LAMP框架的架构与环境配置 一、LAMP架构的相关知识1.LAMP组件的主要作用2.LAMP组件安装顺序 二、编译安装Apache httpd服务1.关闭防火墙&#xff0c;将所需软件包传到/opt目录…

00后简直太卷了,让我们这些老油条情何以堪......

前几天我们公司一下子也来了几个新人&#xff0c;这些年前人是真能熬啊&#xff0c;本来我们几个老油子都是每天稍微加会班就打算走了&#xff0c;这几个新人一直不走&#xff0c;搞得我们也不好走。 2023年春招结束了&#xff0c;最近内卷严重&#xff0c;各种跳槽裁员&#x…

ARM-LED灯--蜂鸣器

目录 点亮LED灯 1.开发板介绍 2.cpu控制硬件原理 3.本地开发和交叉开发 4.点灯实验 分析电路图 底板原理图&#xff1a;1&#xff09;电路原理图&#xff0c;LED的控制方式->高电平亮&#xff0c;低电平灭 核心板原理图&#xff1a;2&#xff09;LED与SOC的连接关系-&…

Vue+node.js校园食堂餐厅外卖点餐系统088e4

外卖点餐系统的主要使用者分为管理员和用户&#xff0c;实现功能包括用户管理、菜品分类管理、菜品信息管理、系统管理、订单管理等功能。由于本网站的功能模块设计比较全面&#xff0c;所以使得整个外卖点餐信息管理的过程得以实现。 本外卖点餐系统主要包括二大功能模块&…

Dynamic Connected Networks for Chinese Spelling Check ---- 论文阅读

DCN 动机简介方法动态连接评分器候选生成拼音增强候选生成器 训练损失函数预训练 预测 实验数据集方法比较 消融 Paper&#xff1a;https://aclanthology.org/2021.findings-acl.216.pdf Code&#xff1a;https://github.com/destwang/DCN [Pytorch] 哈工大讯飞 动机 大多数关…

【Linux】Apache 配置与应用

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 一、构建虚拟 Web 主机1.httpd服务支持的虚拟主机类型 二、基于域名的虚拟主机1.为虚拟主机提供域名解析2.为虚拟主机准备网页文档3.添加虚拟主机配置4.设置访问控制…

FreeRTOS进阶学习

一、FreeRTOS内核控制控制函数&#xff1a; 1、请求任务切换函数&#xff1a; 函数原型&#xff1a;#define taskYIELD() 函数解析&#xff1a;实际上是一个宏定义的函数&#xff0c;调用一次会触发pendSV中断来实现任务切换&#xff1b; /// 2、在任务中进入临界区函数&…

LLM:大模型的正则化

主流大模型使用的Normalization主要有三类&#xff0c;分别是Layer Norm&#xff0c;RMS Norm&#xff0c;以及Deep Norm。 小模型的正则化参考&#xff1a; l1l2正则和dropout正则化[https://youzipi.blog.csdn.net/article/details/75307522] LN和BN归一化 [深度学习&…

【3000字帮你深度剖析数据在内存中的存储】

本节重点 -- 重中之重 数据类型详细介绍 整形在内存中的存储&#xff1a;原码、反码、补码 大小端字节序介绍及判断 浮点型在内存中的存储解析 准备好了&#xff0c;开始啰&#xff0c;在小小的花园里面......最近被这个歌曲洗脑&#xff0c;但是我们并不是要唱歌&#xff0c;而…

linux基础知识学习记录

这里写自定义目录标题 一、 计算机基础知识二 、 Linux操作系统的介绍三、 Linux的安装四、Linux命令使用汇总 一、 计算机基础知识 计算机组成&#xff1a;计算机主要硬件和软件2部分组成。计算机软硬件的概念&#xff1a;硬件是可以看得见的物理实体&#xff0c;软件是运行在…

还在担心期末挂科吗? 期末必备复习资料-----“树“的概念

&#x1f388;个人主页:&#x1f388; :✨✨✨初阶牛✨✨✨ &#x1f43b;推荐专栏: &#x1f354;&#x1f35f;&#x1f32f;C语言进阶 &#x1f511;个人信条: &#x1f335;知行合一 &#x1f349;本篇简介:>:记录期末复习 数据结构中有关树的一些知识 金句分享: ✨我将…

2023最新150道渗透测试面试题

前言 眨眼间2023年快过去一半了&#xff0c;不知道大家有没有找到心仪的工作呀&#xff0c;今天我给大家整理了150道渗透测试面试题给大家&#xff0c;需要答案的话可以在评论区给我留言哦~ 第一套渗透测试面试题 你了解什么是网络安全渗透测试吗&#xff1f; 你的网络安全渗…

Stream相关知识点

这里写目录标题 Stream流体验Stream流Stream流的常见生成方式流程分类具体操作 Stream流常见中间操作之filter简介具体操作 Stream流常见中间操作之limit&skip简介具体操作 Stream流常见中间操作之concat&distinct简介具体操作 Stream流常见中间操作之concat&disti…

什么是SSO

1. 什么是SSO&#xff1f; 「SSO」&#xff08;单一登录single sign on&#xff09;是一种身份验证机制&#xff0c;它允许用户使用单一的凭据登录到多个相关应用程序或系统中。换句话说&#xff0c;用户只需一次登录&#xff0c;就可以访问多个不同的应用程序&#xff0c;无需…

并发专栏-CAS

从 Atomic 到 CAS CAS 知道吗&#xff0c;如何实现&#xff1f; 讲一讲 AtomicInteger&#xff0c;为什么要用 CAS 而不是 synchronized&#xff1f; CAS 底层原理&#xff0c;谈谈你对 UnSafe 的理解&#xff1f; AtomicInteger 的ABA问题&#xff0c;能说一下吗&#xff0c;原…

自学黑客(网络安全/Web安全),一般人我还是劝你算了吧

由于我之前写了不少网络安全技术相关的文章&#xff0c;不少读者朋友知道我是从事网络安全相关的工作&#xff0c;于是经常有人私信问我&#xff1a; 我刚入门网络安全&#xff0c;该怎么学&#xff1f; 要学哪些东西&#xff1f; 有哪些方向&#xff1f; 怎么选&a…

自学网络安全(黑客)该如何系统学习

一、自学网络安全学习的误区和陷阱 1.不要试图以编程为基础的学习开始学习 我在之前的回答中&#xff0c;我都一再强调不要以编程为基础再开始学习网络安全&#xff0c;一般来说&#xff0c;学习编程不但学习周期长&#xff0c;而且实际向安全过渡后可用到的关键知识并不多 一…

layui(1)

Layui镜像站-经典开源模块化前端 UI 框架(官方文档完整镜像) 下载框架包 点击文档&#xff0c;可进入学习界面 1.引入框架包 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-C…