비트마스크 2

[백준/C++] 16457번 단풍잎 이야기

🤔문제 이해 각 퀘스트당 필요한 스킬을 다 사용가능할 때 그 퀘스트를 깰 수 있다. 2n개의 스킬 중 n개만 골랐을 때 최대로 많이 깰 수 있는 퀘스트의 개수를 출력하면 된다. 조건 키의 개수 : n 퀘스트의 개수 : m (1 ~ 100) 퀘스트 당 스킬 수 : k (1 ~ n) 스킬의 번호 ( 1~2n) 🔥풀이🔥 2n개의 스킬 중 배치할 스킬 n개를 골랐을 때 깰 수 있는 퀘스트의 개수 중 가장 큰 값을 출력하게 했다. 변수 - quest[i] : i번째 퀘스트에서 필요한 스킬의 번호를 비트로 표현 재귀함수 void Solve(int i, int d, int cnt) - 현재 상태 : 현재까지 정한 스킬을 비트로 나타내는 i, 몇번째 스킬까지 처리해줬는지를 나타내는 d, 정한 스킬의 개수 cnt - 다..

백준/C++ 2022.08.12

[백준/C++] 2098번 외판원 순회

🤔문제 이해 모든 도시를 거치고 다시 처음 도시로 돌아오는 모든 경로 중 비용이 가장 적게 드는 경로의 비용을 구하는 문제이다. 💡첫번째 아이디어 그냥 순열을 구해서 풀면 최대 16! =20,922,789,888,000으로 1초 안에 절대 풀 수 없다. 이 문제는 1주차 스터디에서 배운 비트마스킹에 대한 문제였고, 문제 풀이 방식을 거의 다 배웠어서 DP와 비트마스킹으로 바로 풀 수 있었다. 물론 DP 동작 방식을 이해하기 위해 시간이 조금 걸리긴 했다. 🔥풀이🔥 dp[i][j]는 현재 위치 i와 현재까지 방문했던 정점들의 정보를 담은 j 값일 때, 앞으로 필요한 순회 비용의 최솟값을 의미한다. j가 (1 w[i][j]; } } cout

백준/C++ 2022.07.16
728x90