50. 영지 선택

강지훈·2021년 11월 30일
0

세종대왕은 현수에게 현수가 다스릴 수 있는 영지를 하사하기로 했다. 전체 땅은 사각형으로 표
시된다. 그 사각형의 땅 중에서 세종대왕이 현수가 다스릴 수 있는 땅의 크기(세로의 길이와 가
로의 길이)를 정해주면 전체 땅 중에서 그 크기의 땅의 위치를 현수가 정하면 되는 것이다.
전체 땅은 사각형의 모양의 격자로 되어 있으며, 그 사각형 땅 안에는 많은 오렌지 나무가 심
겨져 있다. 현수는 오렌지를 무척 좋아하여 오렌지 나무가 가장 많이 포함되는 지역을 선택하
고 싶어 한다. 현수가 얻을 수 있는 영지의 오렌지 나무 최대 개수를 출력하는 프로그램을 작
성하세요. 다음과 같은 땅의 정보가 주어지고, 현수가 하사받을 크기가, 가로 2, 세로 3의 크
기이면 가장 많은 오렌지 나무가 있는 영지는 총 오렌지 나무의 개수가 16인 3행 4열부터 시
작하는 구역이다.
3 5 1 3 1 3 2
1 2 1 3 1 1 2
1 3 1 5 1 3 4
5 1 1 3 1 3 2
3 1 1 3 1 1 2
1 3 1 3 1 2 2
▣ 입력설명
첫 줄에 H(세로길이)와 W(가로길이)가 입력된다. (5<=H, W<=50) 그 다음 H줄에 걸쳐 각 사
각형 지역에 오렌지의 나무 개수(1~9개) 정보가 주어진다.
그 다음 영지의 크기인 세로길이(1~H)와 가로길이(1~W)가 차례로 입력된다.
▣ 출력설명
첫 줄에 현수가 얻을 수 있는 오렌지 나무의 최대 개수를 출력한다.
▣ 입력예제 1
6 7
3 5 1 3 1 3 2
1 2 1 3 1 1 2
1 3 1 5 1 3 4
5 1 1 3 1 3 2
3 1 1 3 1 1 2
1 3 1 3 1 2 2
2 3
▣ 출력예제 1
16

#include
#include
using namespace std;

int main() {
int h,w,n,m,i,j,k,s,sum=0,max=-2147000000;
cin>>h>>w; //세로 h 가로 w
vector<vector >map(h+1, vector(w+1)); //2차원 vector 배열 생성
for(i=1;i<=h;i++){
for(j=1;j<=w;j++){
cin>>map[i][j];
}
}

cin>>n>>m; //세로 n 가로 m   
for(i=1;i<=h-n+1;i++){
	for(j=1;j<=w-m+1;j++){
		sum=0;
		for(k=i;k<i+n;k++){
			for(s=j;s<j+m;s++){
				sum+=map[k][s];
			}
		}
		if(sum>max) max=sum;
	}
}

cout<<max;


return 0;

}

profile
never stop

0개의 댓글