본문 바로가기
대구부자씨집

행열의 부분집합 최대값 구하기!

by 대구부자 2019. 12. 28.
반응형

 

 

 

 

 

 

 

처음 입력 받는 행과 열의 값을 전체 영토 이다.

 

두번째 영토를 받을 크기를 행과 열로 입력 받는다.

 

따라서 우리는 영토의 크기는 알수 있다.

 

내가 받을 영토의 크기는 고정 시키도, 이동 시키면서.

 

합을 구해서 최대 값을 구하면된다.

 

내가 받을 영토의 행 총 영토의 행과 같다면 반복문을 빠져 나가면 될것이다.

 

 

 

아래는 소스 코드를 첨부 하겠다. 

 

 

필요하신분은 다운로드 받아 보세요 .

 

 

영지.cpp
다운로드

 

 

 

#include <stdio.h>

#include <iostream>

 

using namespace std;

 

 

int main() 

{

int row = 0;

int cal = 0;

int array[100][100] = { 0, };

int res[100] = { 0, };

int land_row = 0;

int land_cal = 0;

 

cout << "행을 입력 하세요" << endl;

cin >> row;

cout << "열을 입력 하세요 " << endl;

cin >> cal;

 

 

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

{

for (int k = 0; k < cal; k++) 

{

cin >> array[i][k];

}

}

 

cout << "땅의 행을 입력 하세요" << endl;

cin >> land_row;

cout << "땅의 열을 입력 하세요" << endl;

cin >> land_cal;

 

int row_value = 0;

int cal_value = 0;

int temp = 0;

int max = 0;

 

while (true) 

{

temp = 0; // temp 의 값과 영토의 값을 비교 후 초기화 시켜야 하므로,

for (int i = row_value; i < land_row+row_value; i++)

{

for (int k = cal_value; k < land_cal+cal_value; k++)

{

temp += array[i][k];

}

}

 

if (temp > max)

{

max = temp;

}

 

cal_value++; // 내가받을 영토의 크기만큼 다 더한후 열을 한칸 증가 시킨다.

 

if (land_cal + cal_value == cal) 

{

cal_value = 0;

row_value++;  // 내가 받을 영토의 값을 증가시키다가 총 땅크기의 열과 같아 진다면 행을 내린다., 

// 이후 열값은 0으로 초기화, 다시 첫열부터 더해야 하므로,

}

if (row_value == row ) {

break;

}

}

cout << max << endl;

system("pause");

 

}

#include <stdio.h>

#include <iostream>



using namespace std;





int main() 

{

 int row = 0;

 int cal = 0;

 int array[100][100] = { 0, };

 int res[100] = { 0, };

 int land_row = 0;

 int land_cal = 0;



 cout << "행을 입력 하세요" << endl;

 cin >> row;

 cout << "열을 입력 하세요 " << endl;

 cin >> cal;





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

 {

 for (int k = 0; k < cal; k++) 

 {

 cin >> array[i][k];

 }

 }



 cout << "땅의 행을 입력 하세요" << endl;

 cin >> land_row;

 cout << "땅의 열을 입력 하세요" << endl;

 cin >> land_cal;



 int row_value = 0;

 int cal_value = 0;

 int temp = 0;

 int max = 0;



 while (true) 

 {

 temp = 0; // temp 의 값과 영토의 값을 비교 후 초기화 시켜야 하므로,

 for (int i = row_value; i < land_row+row_value; i++)

 {

 for (int k = cal_value; k < land_cal+cal_value; k++)

 {

 temp += array[i][k];

 }

 }



 if (temp > max)

 {

 max = temp;

 }



 cal_value++; // 내가받을 영토의 크기만큼 다 더한후 열을 한칸 증가 시킨다.



 if (land_cal + cal_value == cal) 

 {

 cal_value = 0;

 row_value++;  // 내가 받을 영토의 값을 증가시키다가 총 땅크기의 열과 같아 진다면 행을 내린다., 

 // 이후 열값은 0으로 초기화, 다시 첫열부터 더해야 하므로,

 }

 if (row_value == row ) {

 break;

 }

 }

 cout << max << endl;

 system("pause");



}

 

 

 

 

반응형

'대구부자씨집' 카테고리의 다른 글

이별에 힘든 청춘 남녀 분들께 드립니다...  (0) 2019.12.30
생활비  (0) 2019.12.30
술 한잔 어때요?  (0) 2019.12.28
짝사랑  (0) 2019.12.28
성공 하려면...  (0) 2019.12.26

댓글