-
반응형
https://www.acmicpc.net/problem/3980
3980번: 선발 명단
각각의 테스트 케이스에 대해서, 모든 포지션의 선수를 채웠을 때, 능력치의 합의 최댓값을 한 줄에 하나씩 출력한다. 항상 하나 이상의 올바른 라인업을 만들 수 있다.
www.acmicpc.net
풀이
백트래킹을 이용해서 모든 경우의 수를 구해주며 풀었다.
멤버순서대로 탐색을 해가면서, 0번~10번 포지션까지 순서대로 해당 포지션이 비어있고, 해당선수가 그 포지션의 능력치가 0이 아니라면, 그 자리를 잡은뒤 능력치를 더해주고 다음선수로 넘어간다.
10번선수까지 모두 포지션을 하나씩 잡았다면, 그때 최댓값을 갱신시켜주고 마지막으로 최댓값을 출력해주면 된다.
코드
#include<iostream> #include<algorithm> using namespace std; int t; int member[11][11] = { 0 }; bool check[11] = { 0 }; int ret = 0; void dfs(int mem,int sum) { if (mem == 11) { ret = max(ret, sum); return; } for (int i = 0; i < 11; i++) { if (!check[i]&&member[mem][i]!=0) { check[i] = true; dfs(mem + 1,sum+member[mem][i]); check[i] = false; } } } int main() { ios::sync_with_stdio(false); cin.tie(0); cout.tie(0); cin >> t; while (t--) { ret = 0; for (int i = 0; i < 11; i++) { check[i] = false; for (int j = 0; j < 11; j++) { cin >> member[i][j]; } } dfs(0,0); cout << ret << "\n"; } return 0; }
반응형'문제풀이 > 백준oj' 카테고리의 다른 글
[백준OJ] 1633번 최고의 팀 만들기 (0) 2021.08.24 [백준OJ] 14595번 동방 프로젝트 (Large) (0) 2021.08.23 [백준OJ] 14600번 샤워실 바닥 깔기 (Small) (0) 2021.08.20 [백준OJ] 9421번 소수상근수 (0) 2021.08.19 [백준OJ] 14425번 문자열 집합 (0) 2021.08.19 댓글