asterisk120   5년 전

재귀로 짠건 이렇게되는데

여기서 DP를 적용해서 쓸모없는 경우의 수를 줄이려고 하는데

어떻게 해야 할 지 모르겠습니다..

n-1까지의 합 중 가장 큰 경우를 고른다 해도 n에서 9999들어오면 무용지물이고

그 반대도 n이 1이여도 n-1까지의 합이 크면 그 루트를 택해야하고...

결국 n까지의 합에서 나올 수 있는 경우의 수를 다 따져봐야하지않나요?

어떤 단계에서 return을 시켜야 경우의 수를 줄일 수 있을까요?

힌트 조금만 부탁드립니다..

djm03178   5년 전

특정 칸에 대해서 재귀 함수가 하는 일은 항상 같습니다. 왼쪽 아래로 한 번 내려가고, 오른쪽 아래로 한 번 내려갑니다. 그렇다면, 만일 위에서부터 현재 칸까지 내려오는 길에 대한 최적 해를 알고 있다면, 이 과정을 2번 이상 거칠 필요가 없겠죠? 지금은 매번 호출될 때마다 현재 칸까지 오는 최적이 뭔지를 결정하지 않은 상태이기 때문에 그렇습니다.

지금처럼 앞에서 얻은 값을 다음으로 넘겨주는 식으로 dp를 하는 건 재귀보다는 반복을 통해서 해결하는 것이 낫습니다. 재귀 dp를 할 때는 나의 현재 상태를 다음으로 넘겨주는 것이 아니라, 다음 상태에서 얻어낸 답을 이용해 나의 dp 값을 결정해서 나를 호출한 쪽에 되돌려주는 것이 일반적입니다. 

asterisk120   5년 전

감사합니다!!

댓글을 작성하려면 로그인해야 합니다.