반응형
문제링크:www.acmicpc.net/problem/3980
dfs문제입니다.
전형적인 dfs문제입니다. 백트래킹에 속하는 이유는 문제조건중에서
각 선수는 능력치가 0인 포지션에 배치될 수 없다.
라는 조건을 수행해야하기 때문입니다.
일반적인 dfs 방식을 사용해서 구현했습니다.
아래는 정답코드입니다.
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
int t = 0, result = 0;
int arr[11][11] = { 0, };
bool visited[11];
void dfs(int cnt, int sum) {
if (cnt == 11) {
result = max(result, sum);
return;
}
for (int i = 0; i < 11; i++) {
if (arr[cnt][i] == 0)
continue;
if (visited[i] == 0) {
visited[i] = 1;
dfs(cnt + 1, sum + arr[cnt][i]);
visited[i] = 0;
}
}
}
int main() {
ios_base::sync_with_stdio(0);
cin.tie(0), cout.tie(0);
cin >> t;
while (t--) {
for (int i = 0; i < 11; i++)
for (int j = 0; j < 11; j++)
cin >> arr[i][j];
memset(visited, 0, sizeof(visited));
result = 0;
dfs(0, 0);
cout << result << "\n";
}
}
반응형
'알고리즘 > DFS' 카테고리의 다른 글
[백준] 13549-숨바꼭질 3(C++) (0) | 2021.02.01 |
---|---|
[백준] 1967-트리의 지름(C++) (0) | 2021.01.31 |
[백준] 16197-두 동전(C++) (0) | 2021.01.23 |
[백준] 2239-스도쿠(C++) (0) | 2021.01.23 |
[백준] 1799-비숍(C++) (0) | 2021.01.19 |