메뉴 건너뛰기

Programing

BAEKJOON

14502

관리자 2019.12.21 19:28 조회 수 : 6

C++

#include <cstdio>

#include <vector>

#include <cstring>

#include <climits>

 

using namespace std;

int N,M,num0;

int area=0;

vector <pair<int,int>> virus;

int map_[10][10];

int map2 [10][10];

int dx[4]={1,-1,0,0};

int dy[4]={0,0,1,-1};

void spread(int x,int y){

    for(int i=0;i<4;i++){

        int ax=x+dx[i],ay=y+dy[i];

        if(ax<0||ay<0||ax>=M||ay>= N){

            continue;

        }

        if(map2[ay][ax]==0){

            area++;

            map2[ay][ax]=2;

            spread(ax,ay);

        }

    }

}

int main()

{

    scanf("%d %d",&N,&M);

    for(int y=0;y<N;y++){

        for(int x=0;x<M;x++){

            scanf("%d",&map_[y][x]);

            if(map_[y][x]==2){

                virus.push_back({x,y});

            }

            if(map_[y][x]==0){

                num0++;

            }

        }

    }

 

    int min_virus_area = INT_MAX;

    int size_ = N * M;

    for(int i = 0; i < size_; ++i)

    {

        if(map_[i / M][i % M])

            continue;

        for(int j = i + 1; j < size_; ++j)

        {

            if(map_[j / M][j % M])

                continue;

            for(int k = j + 1; k < size_; ++k)

            {

                if(map_[k / M][k % M])

                    continue;

 

                memcpy(map2, map_, sizeof(map_));

 

                map2[i / M][i % M] = 1;

                map2[j / M][j % M] = 1;

                map2[k / M][k % M] = 1;

 

                int virus_area = 0;

                for(auto &v: virus)

                {

                    area=0;

                    spread(v.first, v.second);

                    virus_area += area;

                }

 

                min_virus_area = min(min_virus_area, virus_area);

            }

        }

    }

 

    printf("%d",num0-min_virus_area-3);

 

    return 0;

}

번호 제목 글쓴이 날짜 조회 수
공지 안내사항 관리자 2019.12.21 163
45 2468 관리자 2019.12.21 8
44 2458 관리자 2020.04.11 44
43 2457 관리자 2020.04.11 47
42 2454 관리자 2020.04.11 43
41 2450 관리자 2020.04.11 40
40 2339 관리자 2020.04.11 41
39 2307 관리자 2019.12.21 8
38 2250 관리자 2019.12.21 8
37 2233 관리자 2019.12.21 6
36 2170 관리자 2019.12.21 7
35 2132 관리자 2019.12.21 7
34 2096 관리자 2019.12.21 8
33 2042 관리자 2020.04.11 45
32 2003 관리자 2020.04.11 39
31 1991 관리자 2019.12.21 8
30 1967 관리자 2019.12.21 6
29 1966 관리자 2020.04.11 45
28 1946 관리자 2020.04.11 39
27 1874 관리자 2020.04.11 43
26 1839 관리자 2020.04.11 44
25 17611 관리자 2019.12.21 7
24 1753 관리자 2019.12.21 8
23 1742 관리자 2020.04.11 6
22 1720 관리자 2020.04.11 6
21 16210 관리자 2020.04.11 57
20 16201 관리자 2020.04.11 44
19 15971 관리자 2019.12.21 6
18 14865 관리자 2019.12.21 8
17 14503 관리자 2019.12.21 7
» 14502 관리자 2019.12.21 6
위로