预测赢家00

2024-09-04 18:12
文章标签 预测 00 赢家

本文主要是介绍预测赢家00,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

题目链接

预测赢家

题目描述

注意点

  • 1 <= nums.length <= 20
  • 0 <= nums[i] <= 10^7
  • 假设每个玩家的玩法都会使他的分数最大化
  • 如果两个玩家得分相等,同样认为玩家1是游戏的赢家

解答思路

  • 需要注意的是,如果数组中的元素个数为偶数,则玩家1始终都是游戏的赢家
  • 首先可以使用递归找到各个区间能获得的最大分数,因为本题是要判断两个玩家都保证分数最大化的情况下玩家1的分数是否不比玩家2的分数低,所以递归时无论选择左侧数字还是右侧数字都应该减去下一次递归的最大值,最终dfs(nums, dp, 0, n - 1)返回的值就是都保证分数最大化时玩家1与玩家2的分数差。因为在递归的过程中各个区间的最大值可能有多次计算,所以可以使用dp数组保存区间内的最大分数,也就是记忆化递归
  • 第二个方法则是动态规划,首先直到的是区间[i, i]对应的dp[i][i] = nums[i],可以根据dp[i][j - 1]或dp[i + 1][j]对应的dp[i][j]的值,可从区间大小0推至n - 1对应的dp值,需要注意的是,推导dp的公式为dp[i][j] = Math.max(nums[i] - dp[i + 1][j], nums[j] - dp[i][j - 1]),无论选择左侧数字还是右侧数字仍然应该减去下一次递归的最大值(下一次轮到对手选择下一轮的最大值),最终根据dp[0][n - 1]的值是否不小于0判断玩家1是否是赢家

代码

方法一:

class Solution {public boolean predictTheWinner(int[] nums) {int n = nums.length;if (n % 2 == 0) {return true;}// dp[i][j]表示[i, j]区间内能获得的最大分数int[][] dp = new int[n][n];return dfs(nums, dp, 0, n - 1) >= 0;}public int dfs(int[] nums, int[][] dp, int left, int right) {if (left > right) {return 0;}if (dp[left][right] != 0) {return dp[left][right];}int leftVal = nums[left] - dfs(nums, dp, left + 1, right);int rightVal = nums[right] - dfs(nums, dp, left, right - 1);return Math.max(leftVal, rightVal);}
}

方法二:

class Solution {public boolean predictTheWinner(int[] nums) {int n = nums.length;if (n % 2 == 0) {return true;}// dp[i][j]表示[i, j]区间内能获得的最大分数int[][] dp = new int[n][n];for (int i = 0; i < n; i++) {dp[i][i] = nums[i];}for (int len = 1; len < n; len++) {for (int i = 0; i + len < n; i++) {int j = i + len;dp[i][j] = Math.max(nums[i] - dp[i + 1][j], nums[j] - dp[i][j - 1]);}}return dp[0][n - 1] >= 0;}
}

关键点

  • 玩家1与玩家2的最终分数总和之差决定了谁是赢家
  • 无论是记忆化递归还是动态规划dp所记录的始终是玩家1与玩家2的总分数之差
  • 动态规划的思想

这篇关于预测赢家00的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1136658

相关文章

java的Timestamp时间插入mysql的datetime字段是0000-00-00 00:00:00

Mysql 与 java 的时间类型             MySql的时间类型有              Java 中与之对应的时间类型                  date                                               java.sql.Date               Datetime

Tensorflow lstm实现的小说撰写预测

最近,在研究深度学习方面的知识,结合Tensorflow,完成了基于lstm的小说预测程序demo。 lstm是改进的RNN,具有长期记忆功能,相对于RNN,增加了多个门来控制输入与输出。原理方面的知识网上很多,在此,我只是将我短暂学习的tensorflow写一个预测小说的demo,如果有错误,还望大家指出。 1、将小说进行分词,去除空格,建立词汇表与id的字典,生成初始输入模型的x与y d

【00】408笔记

上图参考文章 RIP 最大的跳数为15 为主机配置地址:DHCP ICMP报文传输方式:放在IP数据报的数据字段中传送 CIDR技术的作用:是网络归并技术,把小的网络汇聚成大的超网,进而缓解了地址资源不足的问题 IP首部字段,与分片和重组有关的是:片偏移,标志,标识 普通IP首部长为20个字节,最长60字节 16位总长度(Total Length): 标识IP数据报包的总长度,以字节为单位

临床基础两手抓!这个12+神经网络模型太贪了,免疫治疗预测、通路重要性、基因重要性、通路交互作用性全部拿下!

生信碱移 IRnet介绍 用于预测病人免疫治疗反应类型的生物过程嵌入神经网络,提供通路、通路交互、基因重要性的多重可解释性评估。 临床实践中常常遇到许多复杂的问题,常见的两种是: 二分类或多分类:预测患者对治疗有无耐受(二分类)、判断患者的疾病分级(多分类); 连续数值的预测:预测癌症病人的风险、预测患者的白细胞数值水平; 尽管传统的机器学习提供了高效的建模预测与初步的特征重

结合Python与GUI实现比赛预测与游戏数据分析

在现代软件开发中,用户界面设计和数据处理紧密结合,以提升用户体验和功能性。本篇博客将基于Python代码和相关数据分析进行讨论,尤其是如何通过PyQt5等图形界面库实现交互式功能。同时,我们将探讨如何通过嵌入式预测模型为用户提供赛果预测服务。 本文的主要内容包括: 基于PyQt5的图形用户界面设计。结合数据进行比赛预测。文件处理和数据分析流程。 1. PyQt5 图形用户界面设计

javaweb-day02-2(00:40:06 XML 解析 - Dom4j解析开发包)

导入dom4j开发包:dom4j-1.6.1.jar   在工程下建一个文件夹lib,将dom4j-1.6.1.jar拷到里边。右键add to build path。  dom4j-1.6.1\lib文件夹下还有一些jar包,是开发过程中dom4j所需要依赖的jar包,如开发过程中报错,则需导入。   用dom4j怎么做呢? 只要是开源jar包提供给你的时候,它会在开源包里面提供

javaweb-day01-2(00:17:48 XML 的作用 和 语法)

XML: 描述 可扩展标记语言,w3c  2000年发布的 XML 1.0 版本规范。 用来描述数据之间的关系。 经常用作 软件  的配置文件,描述 模块与模块 之间的关系。 还用作    软件启动  的配置文件,描述 启动模块之间的 依赖 关系。 语法 一个XML文件分为如下几部分内容: 文档声明元素属性注释CDATA区、转义字符处

CNN-LSTM模型中应用贝叶斯推断进行时间序列预测

这篇论文的标题是《在混合CNN-LSTM模型中应用贝叶斯推断进行时间序列预测》,作者是Thi-Lich Nghiem, Viet-Duc Le, Thi-Lan Le, Pierre Maréchal, Daniel Delahaye, Andrija Vidosavljevic。论文发表在2022年10月于越南富国岛举行的国际多媒体分析与模式识别会议(MAPR)上。 摘要部分提到,卷积

多维时序 | Matlab基于SSA-SVR麻雀算法优化支持向量机的数据多变量时间序列预测

多维时序 | Matlab基于SSA-SVR麻雀算法优化支持向量机的数据多变量时间序列预测 目录 多维时序 | Matlab基于SSA-SVR麻雀算法优化支持向量机的数据多变量时间序列预测效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.Matlab基于SSA-SVR麻雀算法优化支持向量机的数据多变量时间序列预测(完整源码和数据) 2.SS

力扣 | 递归 | 区间上的动态规划 | 486. 预测赢家

文章目录 一、递归二、区间动态规划 LeetCode:486. 预测赢家 一、递归 注意到本题数据范围为 1 < = n < = 20 1<=n<=20 1<=n<=20,因此可以使用递归枚举选择方式,时间复杂度为 2 20 = 1024 ∗ 1024 = 1048576 = 1.05 × 1 0 6 2^{20} = 1024*1024=1048576=1.05 × 10^