DP[i] = (i번째 위치에서 끝나는 부분수열 중 가장 긴 LIS 길이)인 것 같습니다. 예제 입력에 대해서는 DP[i] = {1, 2, 1, 3, 2, 4}입니다. DP[i]가 단조증가가 아니기 때문에 이분탐색을 사용할 수 없습니다. DP 값 역추적이 필요합니다. DP[i]가 최대인 i를 아무거나 찾고, 그 DP[i] 값을 준 j<i를 찾고, 이렇게 되짚어나가는 과정이 필요합니다. 구현은 두 가지로 가능합니다. 하나는 앞서 설명한 것처럼 i를 찾고 j<i를 찾기를 반복하면서 다시 계산해보는 방식이고, 다른 하나는 DP표를 채울 때 argmax를 저장해놓는 것입니다.
chlwlsgur000 1년 전
dp에서 index를 얻은 다음 그 index를 numbers에 이용하여
로 결과를 내고싶은데
System.out.println(numbers[ Arrays.binarySearch(dp, 4)]); = 50 // 정상 출력 됨
System.out.println(numbers[ Arrays.binarySearch(dp, 3)]); = -6 // 30을 기대했으나 -6이 출력이 되어 numbers배열에서 오류가 남
System.out.println(numbers[ Arrays.binarySearch(dp, 2)]); = 20 // 정상 출력 됨
System.out.println(numbers[ Arrays.binarySearch(dp, 1)]); =10 // 정상 출력 됨.
3을 제외하고 나머지 4,2,1은 정상출력이 되는데 왜 3만 안될까요.??