想象一下炸弹人游戏,在你面前有一个二维的网格来表示地图,网格中的格子分别被以下三种符号占据:

‘W’ 表示一堵墙
‘E’ 表示一个敌人
‘0’(数字 0)表示一个空位

请你计算一个炸弹最多能炸多少敌人。(最值类型)

由于炸弹的威力不足以穿透墙体,炸弹只能炸到同一行和同一列没被墙体挡住的敌人。

注意:你只能把炸弹放在一个空的格子里

示例:

输入: [["0","E","0","0"],["E","0","W","E"],["0","E","0","0"]]
输出: 3
解释: 对于如下网格0 E 0 0
E 0 W E
0 E 0 0

假如在位置 (1,1) 放置炸弹的话,可以炸到 3 个敌人

1、题目分析

这个题目复杂的地方在于,这个炸弹的可以往四个方向传播,并且传播路径上可能会遇到墙阻碍。所以这里我们需要拆解一下问题。其实我们只需要计算一个方向上面,然后剩下的几个方向也是类似的,所以我们只在一个方向上进行分析。后面的分析我们选择向上的方向。

2、确定状态

这里的最后一步我的理解就是炸弹的最终位置放在什么地方。

假设在(i,j)格放一个炸弹,它向上炸死的敌人数分为三种情况:

  • (i,j)格为空地:(i-1,j)格向上能炸死的敌人数
  • (i,j)格为空地:(i-1,j)格向上能炸死的敌人数+1
  • (i,j)格为墙:0

可以发现当我们需要求(i,j)的时候,需要知道(i-1,j)的情况,这满足子问题要求。

3、转移方程

假设Up[i][j]表示(i,j)格放一个炸弹向上能炸死的敌人数

4、初始条件和边界情况

初始条件:第0行的值和格子里面的内容相关。

  • Up[i][j]=0,如果(0,j)格不是敌人
  • [Up[i][j]=1,如果(0,j)格是敌人

边界情况:注意保证下标要保证大于0小于行列数

5、计算顺序

按照行,逐行计算。
时间复杂度:O(MN);空间复杂度:O(MN)

6、代码实现

上面只解释了向上传播的情况。其他方向的实现类似。

#主要收获就是从四个方向分析的动态规划,申请了四个数组去考虑
class Solution:def maxKilledEnemies(self, grid):""":type grid: List[List[str]]:rtype: int"""if len(grid)==0 or len(grid[0])==0:return 0up = [[0]*len(grid[0]) for i in range(len(grid))]down = [[0] * len(grid[0]) for i in range(len(grid))]right = [[0] * len(grid[0]) for i in range(len(grid))]left = [[0] * len(grid[0]) for i in range(len(grid))]for i in range(len(grid)):for j in range(len(grid[0])):if i>0:if grid[i][j]=='E':up[i][j]=up[i-1][j]+1if grid[i][j]=='0':up[i][j]=up[i-1][j]elif grid[i][j]=='E' and i==0:up[i][j]=1for i in range(len(grid)-1,-1,-1):for j in range(len(grid[0])):if i<len(grid)-1:if grid[i][j]=='E':down[i][j]=down[i+1][j]+1if grid[i][j]=='0':down[i][j]=down[i+1][j]elif grid[i][j]=='E' and i==len(grid)-1:down[i][j]=1for j in range(len(grid[0])):for i in range(len(grid)):if j>0:if grid[i][j]=='E':left[i][j]=left[i][j-1]+1if grid[i][j]=='0':left[i][j]=left[i][j-1]elif grid[i][j]=='E' and j==0:left[i][j]=1for j in range(len(grid[0])-1,-1,-1):for i in range(len(grid)):if j<len(grid[0])-1:if grid[i][j]=='E':right[i][j]=right[i][j+1]+1if grid[i][j]=='0':right[i][j]=right[i][j+1]elif grid[i][j]=='E' and j==len(grid[0])-1:right[i][j]=1max1=0for i in range(len(grid)):for j in range(len(grid[0])):if grid[i][j]=='0':max1=max(max1,up[i][j]+down[i][j]+right[i][j]+left[i][j])return max1

坐标型动态规划——轰炸敌人相关推荐

  1. 【算法】动态规划 ④ ( 动态规划分类 | 坐标型动态规划 | 前缀划分型动态规划 | 前缀匹配型动态规划 | 区间型动态规划 | 背包型动态规划 )

    文章目录 一.动态规划场景 二.动态规划分类 1.坐标型动态规划 2.前缀划分型动态规划 3.前缀匹配型动态规划 4.区间型动态规划 5.背包型动态规划 一.动态规划场景 动态规划 动态规划使用场景 ...

  2. 动态规划——坐标型位操作型

    动态规划--坐标型&位操作型 坐标型动态规划--带阻碍的唯一路径 序列型动态规划--油漆房子 划分型动态规划--解密方式 坐标型动态规划--最长上升连续子序列 坐标型动态规划--最小路径和 坐 ...

  3. 九章算法笔记D2-坐标型动态规划

    tags: 算法 DP 动态规划 大家觉得写还可以,可以点赞.收藏.关注一下吧! 也可以到我的个人博客参观一下,估计近几年都会一直更新!和我做个朋友吧!https://motongxue.cn 文章目 ...

  4. 迷你世界电锯机器人_迷你世界:会旋转的机器人,安装多个火箭炮,全方位轰炸敌人...

    大家好,我是爱玩迷你世界的小咖.欢迎收看小咖的第6期迷你教学~ 说到机器人,可能大家都见过现实中的机器人,或者看过电影中的机器人,它们或许很智能,也或许是一把武器.而小咖从武器中寻找灵感,自己制作了一 ...

  5. CJOJ 2171 火车站开饭店(树型动态规划)

    CJOJ 2171 火车站开饭店(树型动态规划) Description 政府邀请了你在火车站开饭店,但不允许同时在两个相连的火车站开.任意两个火车站有且只有一条路径,每个火车站最多有 50 个和它相 ...

  6. 【基于贪心的树型动态规划】【NOI2007】追捕盗贼

    问题描述 魔法国度 Magic Land 里最近出现了一个大盗 Frank,他在 Magic Land 四处作案,专门窃取政府机关的机密文件(因而有人怀疑 Frank 是敌国派来的间谍). 为了捉住 ...

  7. POJ 2152 fire / SCU 2977 fire(树型动态规划)

    POJ 2152 fire / SCU 2977 fire(树型动态规划) Description Country Z has N cities, which are numbered from 1 ...

  8. 【算法•日更•第九期】树型动态规划详解:二叉苹果树

    ▎前置技能:动态规划&树 树型动态规划一听就知道是在树结构上使用的动态规划,那么不会树结构和动态规划怎么行?戳这里了解动态规划和树. ▎什么是树型动态规划? ☞『定义』 树形动态规划问题可以分 ...

  9. LeetCode 361. 轰炸敌人(前缀和DP)

    文章目录 1. 题目 2. 解题 1. 题目 想象一下炸弹人游戏,在你面前有一个二维的网格来表示地图,网格中的格子分别被以下三种符号占据: 'W' 表示一堵墙 'E' 表示一个敌人 '0'(数字 0) ...

最新文章

  1. 同学我看你答题分钱总被淘汰你得充充电了!
  2. Polymorphic form--多态表单
  3. DCMTK:使用dcmimage 库将DICOM图像转换为PPM或PGM
  4. MySQL 高级 函数
  5. 在windows上Matlab 编译MatConvNet
  6. java中的接口的定义以及实现关系
  7. torch.Tensor和torch.tensor有什么区别?
  8. 新加坡大数据初创公司 Latize 获 150 万美元风险融资
  9. ⌈洛谷1505⌋⌈BZOJ2157⌋⌈国家集训队⌋旅游【树链剖分】
  10. canvas练习 - 七巧板绘制
  11. matplotlib画图去掉边缘空白
  12. 龙芯CPU芯片介绍说明
  13. 全国大学生计算机等级考试计算机二级python真题
  14. python爬取电影票房前50_Python3爬取起猫眼电影实时票房信息,解决文字反爬~~~附源代码...
  15. 港科夜闻|香港科技大学校董会主席沈向洋院士一行到访香港科大(广州)
  16. 蓝牙无线技术(BLE)介绍与开发点滴总结
  17. p6000 深度学习_英伟达推Quadro新显卡,支持VR、深度学习等技术
  18. 双相机 单目三维重建
  19. MarkDown显示各种好看的图案
  20. java环境变量设置和切换版本

热门文章

  1. mysql数据库时差
  2. 传感器精度和分辨率的区别
  3. 本机IP地址,ios的IP地址,www.ip138.com,
  4. linux下jdk的安装与配置jdk-6u45-linux-i586.bin
  5. 软件工程与计算II-9-软件体系结构基础
  6. w8dns服务器未响应,必应输入法在Win8.1下设置属性显示不正常的解决方法
  7. CopyTranslator复制即可翻译,一个PDF文本翻译神器终于面世
  8. GlusterFS基本部署
  9. BGP线路是什么意思?BGP三线的优点是什么?
  10. 小实践之网络打印机的设置(实际操作篇)