https://www.acmicpc.net/problem/3980
최대 5개의 포지션에 배치가 가능하다는 조건을 보고 백트래킹으로 전부 탐색하며 풀 수 있을것이라 생각하였다.
자세한 풀이는 코드 참조
개행문자 생략으로 인한 오답제출
#include <iostream>
#include <functional>
#include <algorithm>
#include <vector>
#include <queue>
using namespace std;
int maps[11][11];
bool vi[11];
int solve(int idx,int sumn) {
if (idx == 11) {
return sumn;
}
int ans = -1;
for (int i = 0; i < 11; i++) {
if (maps[idx][i] != 0 && !vi[i]) {
vi[i] = true;
ans = max(ans, solve(idx + 1, sumn + maps[idx][i]));
vi[i] = false;
}
}
return ans;
}
int main()
{
ios::sync_with_stdio(0);
cin.tie(0);
int tc;
cin >> tc;
for (int i = 0; i < tc; i++) {
for (int a = 0; a < 11; a++) {
for (int b = 0; b < 11; b++) {
cin >> maps[a][b];
}
}
cout << solve(0, 0) << '\n';
}
}
백트래킹의 기본적인 형태