https://www.acmicpc.net/problem/3980
C++풀이(백트래킹 + dfs)
1.모든 경우의 수 dfs로 확인
2.dfs(int cnt=포지션 위치, int sum=현재 능력치 합)
3.cnt==11 함수 탈출 조건 / i(포지션)=0~11 순서대로 탐색
4.dfs 재귀 종료 후 다음 i 탐색 위해 visited초기화
#include <iostream>
#include <cstring>
#include <algorithm>
#include <vector>
using namespace std;
int tc;
int board[11][11];
int visited[11];
int ans;
void dfs(int cnt,int sum)
{
if(cnt==11)
{
ans=max(sum,ans);
return;
}
for(int i=0;i<11;i++)
{
if(board[cnt][i]==0) continue;
if(visited[i]==0)
{
visited[i]=1;
dfs(cnt+1,sum+board[cnt][i]);
visited[i]=0;
}
}
}
int main() {
ios_base::sync_with_stdio(0);
cin.tie(0), cout.tie(0);
cin >> tc;
while(tc--)
{
for(int i=0;i<11;i++)
{
for(int j=0;j<11;j++)
{
cin>>board[i][j];
}
}
memset(visited,0,sizeof(visited));
ans=0;
dfs(0,0);
cout<<ans<<'\n';
}
}