//
// Created by Administrator on 2021/7/25.
// #ifndef C__TEST01_BOMBENEMY_HPP
#define C__TEST01_BOMBENEMY_HPP #include <iostream>
#include <vector>
using namespace std; class BombEnemy {
/*
* 有一个M*N的网络,每个格子可能是空的,可能有一个敌人,可能有
* 一堵墙
* 只能在某个空格子里放一个炸弹,炸弹会炸死所有同行同列的敌人,
* 但是不能穿透墙
* 最多能炸死几个敌人
*
* 敌人: 0 E 0 0
* 输入: 如图 E 0 W E
* 输出: 3 0 E 0 0
* */
public:
BombEnemy(vector<vector<char>> An);
int BombEnemyDP(vector<vector<char>> A);
private:
vector<vector<char>> A;
}; BombEnemy::BombEnemy(vector<vector<char>> An):
A(An){
A.resize(A.size());
for (int i = 0; i < An.size(); ++i) {
A[i].resize(An[i].size());
}
} int BombEnemy::BombEnemyDP(vector<vector<char>> A) {
if(A.size() == 0 || A[0].size() == 0){
return 0;
} vector<vector<int>> f;
vector<vector<int>> res;
f.resize(A.size());
for (int i = 0; i < A.size(); ++i) {
f[i].resize(A[i].size());
} res.resize(A.size());
for (int i = 0; i < A.size(); ++i) {
res[i].resize(A[i].size());
for (int j = 0; j < res.size(); ++j) {
res[i][j] = 0;
}
} //up
for(int i = 0; i < A.size(); ++i){
for(int j = 0; j < A[i].size(); ++j){
if(A[i][j] == 'W'){
f[i][j] = 0;
}else{
f[i][j] = 0;
if(A[i][j] == 'E'){
f[i][j] = 1;
}
if(i>0){
f[i][j] += f[i-1][j];
}
}
res[i][j] += f[i][j];
}
} //down
for(int i = A.size()-1; i >= 0; --i){
for(int j = 0; j < A[i].size(); ++j){
if(A[i][j] == 'W'){
f[i][j] = 0;
}else{
f[i][j] = 0;
if(A[i][j] == 'E'){
f[i][j] = 1;
}
if(i<A.size()-1){
f[i][j] += f[i+1][j];
}
}
res[i][j] += f[i][j];
}
} //left
for(int i = 0; i < A.size(); ++i){
for(int j = 0; j < A[i].size(); ++j){
if(A[i][j] == 'W'){
f[i][j] = 0;
}else{
f[i][j] = 0;
if(A[i][j] == 'E'){
f[i][j] = 1;
}
if(j>0){
f[i][j] += f[i][j-1];
}
}
res[i][j] += f[i][j];
}
} //right
for(int i = 0; i < A.size(); ++i){
for(int j = A[i].size()-1; j >=0; --j){
if(A[i][j] == 'W'){
f[i][j] = 0;
}else{
f[i][j] = 0;
if(A[i][j] == 'E'){
f[i][j] = 1;
}
if(j<A[i].size()-1){
f[i][j] += f[i][j+1];
}
}
res[i][j] += f[i][j];
}
} int result = 0;
for (int i = 0; i < res.size(); ++i) {
for (int j = 0; j < res[i].size(); ++j) {
if(A[i][j] == 0){
if(res[i][j]>result) result = res[i][j];
}
}
}
return result;
}
#endif //C__TEST01_BOMBENEMY_HPP

BombEnemy(炸弹人)的更多相关文章

  1. [LeetCode] Boom Enemy 炸弹人

    Given a 2D grid, each cell is either a wall 'W', an enemy 'E' or empty '0' (the number zero), return ...

  2. [LeetCode] Bomb Enemy 炸弹人

    Given a 2D grid, each cell is either a wall 'W', an enemy 'E' or empty '0' (the number zero), return ...

  3. (NO.00005)iOS实现炸弹人游戏(十一):怪物之火精灵

    大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请多提意见,如果觉得不错请多多支持点赞.谢谢! hopy ;) 从本篇开始我们一次介绍一下游戏中敌人的制作过程.看过第一篇的小 ...

  4. (NO.00005)iOS实现炸弹人游戏(八):游戏主角(一)

    大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请多提意见,如果觉得不错请多多支持点赞.谢谢! hopy ;) 最近一直在做另一个RPG游戏,所以本系列迟迟没有更新,上一篇博 ...

  5. (NO.00005)iOS实现炸弹人游戏(七):游戏数据的序列化表示

    大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 用plist列表文件来表示游戏数据 因为在这个炸弹人游戏中有很多 ...

  6. (NO.00005)iOS实现炸弹人游戏(五):游戏数据的初始化(二)

    大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 我们现在来依次看一下上篇中提到的各个方法,首先介绍的是updat ...

  7. (NO.00005)iOS实现炸弹人游戏(三):从主场景类谈起

    大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 我又粗粗看了下整个项目的代码,比较多: 不少类都与其他类有着千丝 ...

  8. (NO.00005)iOS实现炸弹人游戏(二):素材选择的取舍

    大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 前面一篇里我们基本明确了游戏的大致玩法和特点.下面就游戏中会用到 ...

  9. (NO.00005)iOS实现炸弹人游戏(一):游戏的整体规划设计

    在这新的系列中,我们来尝试完成一款经典的游戏:炸弹人 这是以前红白机上的炸弹人,由于游戏可玩性强,玩法又简单,在后面的机型上陆续推出了很多款续作. 在随后的触屏设备上也出现了炸弹人的模拟版,用的是模拟 ...

随机推荐

  1. 小白自制Linux开发板 六. SPI TFT屏幕修改与移植

    本文章参考:https://www.bilibili.com/read/cv9947785?spm_id_from=333.999.0.0 本篇通过SPI接口,使用ST7789V TFT焊接屏(13p ...

  2. cookie和session和localStorage的区别

    这三个都是保存在浏览器端,而且都是同源的. Session仅在当前浏览器窗口关闭有效,不能持久保存 Localstorage始终有效,窗口或浏览器关闭也一直保存,因此用作持久数据 Cookie只在设置 ...

  3. kivy Label标记文本

    from kivy.app import App from kivy.uix.boxlayout import BoxLayout from kivy.lang import Builder # 注意 ...

  4. Scrum Meeting 12

    第12次例会报告 日期:2021年06月03日 会议主要内容概述: 介绍了现有进度,wpb介绍了jwt的用法以及部署的swagger的测试用法. 一.进度情况 我们采用日报的形式记录每个人的具体进度, ...

  5. Seata分布式事务失败通知

    一.背景 在我们使用Seata作为分布式事务时,有些时候我们的分布式时候并不是每次都可以成功的,而对于这些失败的分布式事务就需要进行通知.这篇文章简单记录一下如何实现通知. 二.功能实现 此处模拟邮件 ...

  6. 升级MySQL8.0的历险记

    最近忙于Fighting的项目,所以笔耕有些松懈,实为不该. 刚好遇到需要从MySQL5.7.33升级到MySQL8.0.x的需求,于是记录一下整个升级过程,踩坑而过. 背景梗概:本地docker容器 ...

  7. 脚本:bat实现自动转换windows远程端口

    问题描述:通过一个脚本可以实现windows远程端口的转换,这个是拷贝过来学习的一个脚本 @echo off color f0 echo 修改远程桌面3389端口(支持Windows 2003 200 ...

  8. 一套比较好用的公众号UI框架-weui

    最近工作原因 需要在pd端弄一套js类似bootstrap框架 由于使用环境是在公众号终端用的比较多! 类似上面这样的样式 所以我从微信官方开始找起 最后找到了WEUI 还别说 真的挺好用的 这是大佬 ...

  9. ESD

    Reverse standoff voltage是保护二极管的反向工作电压, 在这个电压, 二极管是不工作的. Breakdown voltage 是二极管的击穿电压, 超过这个电压后, 二极管迅速反 ...

  10. python fnmatch & glob

    1,转载:Python模块学习 - fnmatch & glob - Dahlhin - 博客园 (cnblogs.com) 介绍 fnmatch 和 glob 模块都是用来做字符串匹配文件名 ...