2098번 - 외판원 순회
ret을 처음에 987654321로 초기화를 시킨 후 21번째 줄에서 ret = min(ret, min_cost(visited, i, left-1)+w[now][i]); 를 사용하여 ret을 갱신시켜주는 방식으로 코드를 짯습
니다. 그런데 자꾸 코드를 돌려보면 답이 987654321로 뜹니다;; min합수가 작동안할리는 없고 min_cost(visited, i, left-1)+w[now][i] 가 987654321의 값을 뛰어넘어서
그렇다고 생각했습니다... 그래서 min_cost(visited, i, left-1)+w[now][i] 값을 도중에 출력시켜보니 정상적으로 나오는데 도데체 min 함수가 작동을 안하는건지 아니면 제
가 놓치고 있는 부분이 있는지 제 짧은 소견으로는 도저히 이해할 수가 없습니다/.. 도와주십시오...
dp배열의 크기가 작아보입니다.
그리고 현재 visit로만 dp를 돌리고있는데 이것만으론 정답을 구할 수 없습니다.
당장 눈에 보이는건... 도시를 다 돌고 다시 1로 돌아와야 하는데 현재 코드는 그렇게 돌 수가 없군요.
즉 left==0에 도달하지 못하고 min_cost 값이 도중에 정상적으로 나올 수 없어보입니다.
비트마스크 자릿수를 헷갈렸었네요... visited |= (1<<i) 에서 i의 자릿수가 그대로 들어가는 게 아니라 1이 증가한 상태로 저장된다는 사실을 간과했던 것 같습니다..
예를 들어서 2를 visited에 저장하려면 visited |= (1<<1) 인데 위 코드에는 그대로 들어가서 틀렸던 것 같습니다 .
이 점이랑 몇몇 사소한 부분들을 고치니깐 정답처리됬습니다. 감사합니다!!!
댓글을 작성하려면 로그인해야 합니다.
jungby1 4년 전
ret을 처음에 987654321로 초기화를 시킨 후 21번째 줄에서 ret = min(ret, min_cost(visited, i, left-1)+w[now][i]); 를 사용하여 ret을 갱신시켜주는 방식으로 코드를 짯습
니다. 그런데 자꾸 코드를 돌려보면 답이 987654321로 뜹니다;; min합수가 작동안할리는 없고 min_cost(visited, i, left-1)+w[now][i] 가 987654321의 값을 뛰어넘어서
그렇다고 생각했습니다... 그래서 min_cost(visited, i, left-1)+w[now][i] 값을 도중에 출력시켜보니 정상적으로 나오는데 도데체 min 함수가 작동을 안하는건지 아니면 제
가 놓치고 있는 부분이 있는지 제 짧은 소견으로는 도저히 이해할 수가 없습니다/.. 도와주십시오...