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

posted @   蘑菇王国大聪明  阅读(254)  评论(0编辑  收藏  举报
编辑推荐:
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示