아래 삽질처럼 dp[][] 배열을 잘못잡아서 한번 평가한 결과를 더 나은 경우로 다시 평가해야하면 시간초과가 난다. 현재 위치가 pos 이고 방문상태가 visits 일 때dp[pos][visits] 를 원점으로 돌아가기 위한 비용으로 두면 이런 상황이 발생하지 않는다.
모든 정점을 방문하는 것이 아니라 원점으로 돌아와야 하는 것이므로, 맨 마지막에만 원점으로 돌아가도록 구현해야한다. 위 코드는 처음에 visits 을 1을 둬서 원점인 0번에 중간에 갈 수 없도록 하였고, 마지막에 visits 가 꽉 차면 원점인 0으로 가도록 하는 방식으로 구현하였다.
시간 복잡도
O(n^2*2^n)
코드
삽질
코드
설명
위 방법은 dp[pos][visits] 를 visits 만큼 방문해서 pos 위치에 도달하기까지 걸리는 비용을 두었다. 이러한 dp[][] 는 재평가될 가능성이 크다. 그리고 한번 재평가되면 이 값을 기준으로 평가한 다른 dp[][] 값들도 재평가를 해야한다. 그래서 시간초과가 뜬다.
댓글남기기