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实现炸弹人游戏(一):游戏的整体规划设计
在这新的系列中,我们来尝试完成一款经典的游戏:炸弹人 这是以前红白机上的炸弹人,由于游戏可玩性强,玩法又简单,在后面的机型上陆续推出了很多款续作. 在随后的触屏设备上也出现了炸弹人的模拟版,用的是模拟 ...
随机推荐
- 题解 [SHOI2012]随机树
题目传送门 Description \(n\le 100\) Solution Problem 1 不难看出,答案就是: \[1+\sum_{i=1}^{n-1} 2/(i+1) \] Problem ...
- 『Mivik的萌新赛 & Chino的比赛 2020』T2 题解 Galgame
如果这是我最后一篇题解,请每年为我上坟. Galgame 题目传送门 Decription as_lky 搞到了很多 Galgame(真的很多!).一款 Galgame 可以被描述为很多场景(Scen ...
- CF739E Gosha is hunting(费用流/凸优化dp)
纪念合格考爆炸. 其实这个题之前就写过博客了,qwq但是不小心弄丢了,所以今天来补一下. 首先,一看到球的个数的限制,不难相当用网络流的流量来限制每个球使用的数量. 由于涉及到最大化期望,所以要使用最 ...
- 简单几步零成本使用Vercel部署OneIndex 无需服务器搭建基于OneDrive的网盘
前提 你需要一个OneDrive账号,必须管理员开放API 需要已安装Node.js 拥有Github账号,没有就注册一个 魔法上网环境(看情况) 注册应用 登录https://portal.azur ...
- 【实验向】问题:假设计算机A和计算机B通信,计算机A给计算机B发送一串16个字节的二进制字节串,以数组形式表示:
问题: 假设计算机A和计算机B通信,计算机A给计算机B发送一串16个字节的二进制字节串,以数组形式表示: unsigned char[16] = {0x3f, 0xa0, 0x00, 0x00, 0x ...
- WeakMap与Map,使用WeakMap实现深拷贝循环引用问题
1.Map可以使用任意类型的key值,不限字符串,对象等. 2.WeakMap只能使用对象作为key值,是弱引用,当从WeakMap中移除时,会自动垃圾回收 3.Object只能用基本类型作为key值 ...
- javascript-jquery选择器
jquery选择器用来获得jquery对象 我们用一个实例来演示jquery与原生的区别 <div id="title">123</div>原生获得元素的方 ...
- UML快速概述 - All you need to know about UML
UML 是统一建模语言的缩写,就像使用一组图表来可视化软件建模的蓝图(或设计计划).它不仅可以让您彻底评估整个概念,还可以确保团队中的每个人都在同一页面上. UML 图可以组织成两个不同的组. 结 ...
- 基于ImportBeanDefinitionRegistrar和FactoryBean动态注入Bean到Spring容器中
基于ImportBeanDefinitionRegistrar和FactoryBean动态注入Bean到Spring容器中 一.背景 二.实现方案 1.基于@ComponentScan注解实现 2.基 ...
- mbps和MB/s是怎么换算的
Mbps即"传输速率",也叫"带宽".去营业厅开网线的时候会问开几兆的宽带,这里说的"几兆的宽带"就是指多少Mbps,但是Mbps和MB/s ...