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

网站建设企业宣传口号站外推广渠道

网站建设企业宣传口号,站外推广渠道,连云港做网站设计,杭州响应式网站建设Leetcode 3283. Maximum Number of Moves to Kill All Pawns 1. 解题思路2. 代码实现 题目链接:3283. Maximum Number of Moves to Kill All Pawns 1. 解题思路 这一题坦率地说没有想到什么好的思路,因此只能非常暴力地按照题意进行了一下构造。 显然…
  • Leetcode 3283. Maximum Number of Moves to Kill All Pawns
    • 1. 解题思路
    • 2. 代码实现
  • 题目链接:3283. Maximum Number of Moves to Kill All Pawns

1. 解题思路

这一题坦率地说没有想到什么好的思路,因此只能非常暴力地按照题意进行了一下构造。

显然,这个题目可以拆分为两个小题目:

  1. 给出任意 50 × 50 50\times50 50×50的棋盘上的两个点A和B,求令马从点A跳到点B所需的最小步数。
  2. Alice和Bob的吃兵游戏。

其中,前者本应有一些比较漂亮的解答的,这里我倒是没有想到啥好的,最后就是暴力的走了一个宽度优先的遍历。

而关于第二小题,我们的解法则更加暴力,就是分别构造了两个耦合的动态规划算法来翻译了一下题目的过程,其伪代码如下:

def dp_alice(position, status):if status == 2**n-1:return 0return max(step(position, points[i]) + dp_bob(points[i], status | (1 << i)) for i in range(n) if status & (1 << i) == 0)def dp_bob(position, status):if status == 2**n-1:return 0return min(step(position, points[i]) + dp_alice(points[i], status | (1 << i)) for i in range(n) if status & (1 << i) == 0)

这里,我们用一个整数的二进制上的位来记录每一个坐标位置 i i i上的兵是否已经被吃掉了。

2. 代码实现

给出最终的python代码实现如下:

@lru_cache(None)
def move(x0, y0, x1, y1):dirs = [(1, 2), (1, -2), (-1, 2), (-1, -2), (2, 1), (2, -1), (-2, 1), (-2, -1)]if abs(x0-x1) == 2 * abs(y0-y1):return abs(y0-y1)if abs(y0-y1) == 2 * abs(x0-x1):return abs(x0-x1)q = [(0, abs(x0-x1) + abs(y0-y1), x0, y0)]seen = {(x0, y0)}while q:step, _, x, y = heapq.heappop(q)for dx, dy in dirs:if x + dx == x1 and y+dy == y1:return step+1if 0 <= x+dx < 50 and 0 <= y+dy < 50 and (x+dx, y+dy) not in seen:seen.add((x+dx, y+dy))heapq.heappush(q, (step+1, abs(x+dx-x1) + abs(y+dy-y1), x+dx, y+dy))return math.infclass Solution:def maxMoves(self, kx: int, ky: int, positions: List[List[int]]) -> int:n = len(positions)END = 2**n-1@lru_cache(None)def dp_alice(x, y, status):if status == END:return 0ans = 0for i in range(n):if status & (1 << i) != 0:continuex1, y1 = positions[i][0], positions[i][1]ans = max(ans, move(x, y, x1, y1) + dp_bob(x1, y1, status | (1 << i)))return ans@lru_cache(None)def dp_bob(x, y, status):if status == END:return 0ans = math.inffor i in range(n):if status & (1 << i) != 0:continuex1, y1 = positions[i][0], positions[i][1]ans = min(ans, move(x, y, x1, y1) + dp_alice(x1, y1, status | (1 << i)))return ansreturn dp_alice(kx, ky, 0)

提交代码评测得到:耗时11035ms,占用内存119MB。

http://www.mmbaike.com/news/57210.html

相关文章:

  • 什么是网站结构seo的基本步骤是什么
  • 怎么自己做砍价网站班级优化大师怎么下载
  • ps做网站大小国家提供的免费网课平台
  • 石家庄网站做网站网站推广的策略
  • 响应网站怎么做建站abc官方网站
  • 成都疫情为什么不公开了seo专业培训seo专业培训
  • 金融类的网站怎么做山东搜索引擎优化
  • 网站建设带后台带微商城百度账号个人中心
  • 网站建站报告搜索引擎优化的简写是
  • 汽车手机网站制作上海网络推广排名公司
  • 做国外网站什么好怎样在百度上免费做广告
  • 网站模板购买网页设计模板图片
  • 无锡建设网站的公司简介西安网站建设制作公司
  • 多用户商城购物系统嘉兴seo外包服务商
  • 重庆网站建设套餐壹起航网络推广的目标
  • 广西建设学院网站网站设计公司排名
  • 购物网站每个模块主要功能自己的app如何接广告
  • 南阳卧龙区高端网站建设价格网络营销技巧培训
  • 关于网页制作合肥网站seo推广
  • 做区块链在哪个网站页面优化的方法有哪些
  • 做电商什么外推网站好小红书seo是什么
  • 开网站成本网络视频营销的案例
  • wordpress $url_array北京知名seo公司精准互联
  • 社群营销与运营福州网站seo优化公司
  • 兰州企业做网站游戏推广员每天做什么
  • 用sublime text做网站网络推广策划方案怎么写
  • 网站开发 培训东莞网站建设优化诊断
  • 国内网站开发公司代运营竞价公司
  • 合肥做淘宝网站建设百度推广登录平台官网
  • 明星静态网站百度投诉中心24人工 客服电话