728x90
브루트포스로 문제를 해결했습니다.
재귀함수를 통해서 모든 경우에 대해서 확인해서
최댓값을 구한 뒤 출력해주었습니다.
#include <iostream>
#include <algorithm>
#include <cstring>
using namespace std;
int n, m;
int result = 0;
int arr[40][40];
void solve(int i, int c, int score[])
{
int temp[40];
for (int j = 0; j < n; ++j) {
temp[j] = max(score[j], arr[j][i]);
}
if (c == 3) {
int sum = 0;
for (int j = 0; j < n; ++j) {
sum += temp[j];
}
result = max(result, sum);
return;
}
for (int j = i + 1; j < m; ++j) {
solve(j, c + 1, temp);
}
return;
}
int main(int argc, char* argv[])
{
int score[40];
memset(score, 0, sizeof(score));
memset(arr, 0, sizeof(arr));
cin >> n >> m;
for (int i = 0; i < n; ++i) {
for (int j = 0; j < m; ++j) {
cin >> arr[i][j];
}
}
for (int i = 0; i < m; ++i) {
solve(i, 1, score);
}
cout << result << endl;
return 0;
}
'알고리즘' 카테고리의 다른 글
[C++] 백준 1298번 노트북의 주인을 찾아서 (0) | 2019.10.29 |
---|---|
[C++] 백준 16440번 제이크와 케이크 (0) | 2019.10.28 |
[C++] 백준 16435번 스네이크버드 (0) | 2019.10.28 |
[C++] 백준 16433번 주디와 당근농장 (0) | 2019.10.28 |
[C++] 백준 16431번 베시와 데이지 (0) | 2019.10.27 |