안녕하세요.
우선, 이문제는 탑다운으로도 충분히 풀립니다. 저도 [2][3001][3001]캐쉬 선언해서 AC를 받았습니다.
dp함수의 현재상태선언이 잘못된것같습니다.(점화식의 오류) 이런 경우는 간단한 로우데이터를 넣어서는 반례를 찾기 쉽지않습니다.
그리고 문제에서 주어진 순서대로가아니라 idx를 N-1부터 0까지 거꾸로 접근하면 로직의 잘못된점을 찾기가 힘듭니다. 정상적인 흐름이 아니기 때문입니다.
idx를 0부터 접근시키도록 함수를 수정하고, 문제의 로직에따라 천천히 다시 구현하시면 충분히 AC를 받으실 것 같습니다.
그리고 반례를 하나 찾아 첨부해 두겠습니다.
또 밑에 저의 로직을 써놓았으니, 스포일러를 피하고 본인의 힘으로 푸시겠다하시면 여기까지 글을 읽으시고 함수를 수정하시면 됩니다.
// 점화식 스포일러
//
//
기저사례: if(idx==N)return 0
if(sleep할수 없으면) return ret=f(0,cnt,idx+1);
if(자고있으면)return ret=max( f(1,cnt-1,idx+1)+값,f(0,cnt,idx+1) )
else return ret=max( f(1,cnt-1,idx+1),f(0,cnt,idx+1) )
devbelly 4년 전
안녕하세요 이문제 풀다가 게시판에 글도 없고 테스트해볼 케이스도 많이 없어서 손으로만 한두개 넣어봣는데요
제가 작성한 코드는 CACHE 배열의 값이 작을떄는 잘 작동하는데 문제를 맞추기 위해
cache[2][301][301] -> cache[2][3001][3001]로 수정하니 아에 작동을 안하더라구요
코드자체는...맞는진 모르겠지만 아마 바텀업으로 바꾸면 되지 않을까? 라는 생각에 제가 작성한 코드를 바텀업으로 바꾸려고 했는데요
어떻게 해야할지 전혀모르겠습니다.
궁금한 점은
1. 제가 작성한코드가 아에 알고리즘이 틀렸나요?
2. 맞다면 해당 코드를 바텀업으로 어떻게 바꿀수 있나요?