当前位置: 首页 > news >正文

商业网站的后缀一般为大数据获客系统

商业网站的后缀一般为,大数据获客系统,dw建立网站之后怎么做,婚庆公司报价表想要精通算法和SQL的成长之路 - 预测赢家 前言一. 预测赢家二. 石子游戏(预测赢家的进阶版)2.1 博弈论 前言 想要精通算法和SQL的成长之路 - 系列导航 一. 预测赢家 原题链接 主要思路: 我们定义dp[i][j]:在区间 [i, j] 之间先…

想要精通算法和SQL的成长之路 - 预测赢家

  • 前言
  • 一. 预测赢家
  • 二. 石子游戏(预测赢家的进阶版)
    • 2.1 博弈论

前言

想要精通算法和SQL的成长之路 - 系列导航

一. 预测赢家

原题链接
在这里插入图片描述

主要思路:

  1. 我们定义dp[i][j]:在区间 [i, j] 之间先手情况下能拿到的相对分数
  2. 因为玩家1是先手,那么我们站在玩家1的角度来思考,在区间 [i, j] 之间,如果玩家1选择最左侧,值为num[i]。那么玩家2只能在[i-1,j]区间内选择,并且是先手。那么他能拿到的最大相对分数就是:dp[i+1][j]。那么此时玩家1选择左手时的相对分数就是:num[i] - dp[i+1][j]
  3. 同理如果玩家1先手选择最右侧,那么此时玩家1选择左手时的相对分数就是:num[j] - dp[i][j-1]
  4. 那么本次玩家1应该选择利益最大化的,即:Max(num[i] - dp[i+1][j], num[j] - dp[i][j-1])
  5. 只要这个值 >=0 (相对分数,差值)玩家1就是胜利者。

代码如下:

public boolean predictTheWinner(int[] nums) {return dfs(0, nums.length - 1, nums) >= 0;
}public int dfs(int left, int right, int[] nums) {// 遍历完了,返回0if (left > right) {return 0;}// 选择最左侧时的最大相对差值int chooseLeft = nums[left] - dfs(left + 1, right, nums);// 选择最右侧时的最大相对差值int chooseRight = nums[right] - dfs(left, right - 1, nums);// 返回最大相对差值return Math.max(chooseLeft, chooseRight);
}

当然,这类递归性质的代码,往往都存在一些重复计算的动作,我们用一个全局的数组,来记录递归过程中计算出来的值,即:记忆化搜索。

private int[][] memo;public boolean predictTheWinner(int[] nums) {int len = nums.length;memo = new int[len][len];// 初始化一个比较特殊的值,用于判断是否计算过for (int i = 0; i < len; i++) {Arrays.fill(memo[i], Integer.MAX_VALUE);}return dfs(0, nums.length - 1, nums) >= 0;
}public int dfs(int left, int right, int[] nums) {if (left > right) {return 0;}// 记忆化搜索,如果搜索过,直接返回if(memo[left][right] != Integer.MAX_VALUE) {return memo[left][right];}// 如果当前先手,选择左边的数,那么后手就是:dfs(left + 1, right, nums),计算后手的最大值,我们求此时先后手的相对值int chooseLeft = nums[left] - dfs(left + 1, right, nums);int chooseRight = nums[right] - dfs(left, right - 1, nums);return memo[left][right] = Math.max(chooseLeft, chooseRight);
}

二. 石子游戏(预测赢家的进阶版)

原题链接
在这里插入图片描述
这个题目相当于在第一题的基础上多了两个条件:

  • 石头总数为奇数。
  • 堆数为偶数。

也就是说不可能存在平局的情况。

2.1 博弈论

在满足上述两个条件的基础上:先手必胜。

我们假设一个数组如下:[奇, 偶, 奇, 偶, 奇, 偶, 奇, 偶, 奇, 偶, 奇, 偶]。

  • 那么对于先手而言:他能选择的序列为:奇偶序列(头和尾)[, 偶, 奇, 偶, 奇, 偶, 奇, 偶, 奇, 偶, 奇, ]。
  • 那么对于后手而言:如果先手选择的是奇数,那么后手选择的序列只能是偶偶序列。[“先手选的”, , 奇, 偶, 奇, 偶, 奇, 偶, 奇, 偶, 奇, ]。反之同理,只能选择奇奇序列。

总之就是:先手必定是奇偶性不同的局面。后手必定是奇偶性相同的局面。

那么问题简单了,我们只需要知道,奇序列的总和偶序列总和 谁大,然后先手每次决策的时候,限制对方只能选择奇偶序列的对立面即可。

因此题目中既然说明了Alice先手的情况,我们直接返回true就完事了。

public boolean stoneGame(int[] piles) {return true;
}
http://www.tj-hxxt.cn/news/49628.html

相关文章:

  • 该网站想要跳转百度app百度云链接
  • 服务器做多个网站电子商务推广方式
  • 做酒水批发的网站有哪些平台可以发布推广信息
  • WordPress网站转HTPPS搜索引擎公司排名
  • 建设网站和ipv4和ipv6什么关系营销型网站名词解释
  • 外贸网站建站注意事项自己怎么创建一个网站
  • wordpress管理员账号数据库添加湖南正规关键词优化首选
  • 网站设计和内容上的不足和建议百度精准营销获客平台
  • 关于网站建设毕业答辩怎么说软文广告经典案例300大全
  • 做外贸网站注意什么quark搜索引擎入口
  • 企业网站策划应该怎么做seo推广是做什么的
  • 如何下载js做的网站南京seo公司排名
  • 微信高端网站建设百度开户怎么开
  • 网站建设包括什么站长工具查询网站信息
  • 北京房产网站建设进入百度
  • 网络营销的效果表现在哪几个方面江苏seo推广
  • 装修设计公司简介网站如何优化关键词排名
  • 网站日程建设表新东方烹饪学校学费一年多少钱
  • 营销型网站建设页面网络推广外包要多少钱
  • 菏泽百度网站建设怎样推广产品
  • 佳木斯外贸网站建设最新国际新闻大事件
  • 滨州网站建设哪家好h5网站制作平台
  • 青岛正规网站建设哪家便宜成人培训班有哪些课程
  • 郑州网站开发公司哪家好外国网站开放的浏览器
  • 昆山网页设计报价seo关键词排名优化如何
  • 中国建设银行网站打不开百度seo运营工作内容
  • wangz网站建设上海网站seo快速排名
  • 科技类网站设计特点微信小程序怎么制作自己的程序
  • 建设网站的源代码的所有权网络品牌推广
  • 网站建设功能设计专业网站推广软件