BombEnemy(炸弹人)
//
// 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(炸弹人)的更多相关文章
- [LeetCode] Boom Enemy 炸弹人
Given a 2D grid, each cell is either a wall 'W', an enemy 'E' or empty '0' (the number zero), return ...
- [LeetCode] Bomb Enemy 炸弹人
Given a 2D grid, each cell is either a wall 'W', an enemy 'E' or empty '0' (the number zero), return ...
- (NO.00005)iOS实现炸弹人游戏(十一):怪物之火精灵
大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请多提意见,如果觉得不错请多多支持点赞.谢谢! hopy ;) 从本篇开始我们一次介绍一下游戏中敌人的制作过程.看过第一篇的小 ...
- (NO.00005)iOS实现炸弹人游戏(八):游戏主角(一)
大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请多提意见,如果觉得不错请多多支持点赞.谢谢! hopy ;) 最近一直在做另一个RPG游戏,所以本系列迟迟没有更新,上一篇博 ...
- (NO.00005)iOS实现炸弹人游戏(七):游戏数据的序列化表示
大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 用plist列表文件来表示游戏数据 因为在这个炸弹人游戏中有很多 ...
- (NO.00005)iOS实现炸弹人游戏(五):游戏数据的初始化(二)
大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 我们现在来依次看一下上篇中提到的各个方法,首先介绍的是updat ...
- (NO.00005)iOS实现炸弹人游戏(三):从主场景类谈起
大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 我又粗粗看了下整个项目的代码,比较多: 不少类都与其他类有着千丝 ...
- (NO.00005)iOS实现炸弹人游戏(二):素材选择的取舍
大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 前面一篇里我们基本明确了游戏的大致玩法和特点.下面就游戏中会用到 ...
- (NO.00005)iOS实现炸弹人游戏(一):游戏的整体规划设计
在这新的系列中,我们来尝试完成一款经典的游戏:炸弹人 这是以前红白机上的炸弹人,由于游戏可玩性强,玩法又简单,在后面的机型上陆续推出了很多款续作. 在随后的触屏设备上也出现了炸弹人的模拟版,用的是模拟 ...
随机推荐
- 关于十二生肖的数学发现(C++)
把数字看成是年份,然后根据生肖赋值.这里把鼠年赋值为1,牛年赋值为2,虎年赋值为3,兔年赋值为4,龙年赋值为5,蛇年赋值为6,马年赋值为7,羊年赋值为8,猴年赋值为9,鸡年赋值为10,狗年赋值为11, ...
- Flask的环境配置
Flask django是大而全,提供所有常用的功能 flask是小而精,只提供核心功能 环境配置 为了防止 django和 flask环境相互冲突,可以使用 虚拟环境分割开 pip instal ...
- [技术博客]使用pylint实现django项目的代码风格检查
使用pylint实现django项目的代码风格检查 前言 一个项目大多都是由一个团队来完成,如果没有统一的代码规范,那么每个人的代码的风格必定会有很大的差别.且不说会存在多个人同时开发同一模块的情 ...
- Vue项目搭建常用的配置文件,request.js和vue.config.js
request.js用来请求数据,封装的代码如下: import axios from 'axios' const request = axios.create({ timeout: 5000 }) ...
- 学习手册 | MySQL篇 · 其一
InnoDB关键特性 插入缓冲(Insert Buffer) 问题: 在InnoDB插入的时候,由于记录通常都是按照插入顺序,也就是主键的顺序进行插入的,因此,插入聚集索引是顺序的,不需要随机IO ...
- 「笔记」$Min\_25$筛
总之我也不知道这个奇怪的名字是怎么来的. \(Min\_25\)筛用来计算一类积性函数前缀和. 如果一个积性函数\(F(x)\)在质数单点是一个可以快速计算的关于此质数的多项式. 那么可以用\(Min ...
- Mysql的入门和连接问题
Mysql的连接问题 最近学完了mysql的基础语法,基本上是掌握了mysql的简单运用. 1.入门mysql 我是通过看<漫画sql>入门的,这个视频案例很到位,跟着2倍速学前9章就可以 ...
- SpringCloud微服务实战——搭建企业级开发框架(十):使用Nacos分布式配置中心
随着业务的发展.微服务架构的升级,服务的数量.程序的配置日益增多(各种微服务.各种服务器地址.各种参数),传统的配置文件方式和数据库的方式已无法满足开发人员对配置管理的要求: 安全性:配置跟随源代码保 ...
- CentOS8 部署 MySQL8
前言 有来项目的数据库在此之前使用的是 Docker 部署的,具体可见文章 Docker 安装 MySQL8 ,服务器是阿里云 2C2G 的ECS轻量服务器,可能是配置问题有时不论查什么都要等很长很长 ...
- Educational Codeforces Round 114 (Rated for Div. 2)题解
还是常规的过了A,B,C还是在D上卡了... D. The Strongest Build 简化题意:给定你n组东西,每组东西都有\(c_i\)个装备,每个装备有一个武力值\(a_{i,j}\),要求 ...