powerlsj7   3년 전

1 2 3 6 4 3 2

이렇게 있다고 치면

반복문으로 0번 인덱스부터 검색해서 dp를 구하고 그 dp가 끝나는 중에1 2 3 6 4 3 2

이렇게 있다고 치면

반복문으로 0번 인덱스부터 검색해서 dp를 구하고 그 그 인덱스에서 출발해서 감소하는 가장긴 부분 수열을 구하는게 가능한지 궁금합니다.

1까지 검색하면 거기서 작아지는 부분 수열 검색하는거죵 1보다 작은 놈은 없으니까 종료

2도 종료 3도 종료 6에서는 다음이 4니까 진행 3진행 2진행 해서 1236432 이렇게 구하는 식으로.. 

근데 틀리게 나와서 뭔가 논리에 문제가 있는 것 같은데 뭔지 모르겠어용.

이부분인데요 . 그 길이에서 n-1번째까지 제일 긴 감소하는 수열을 구하면 되자나요? 그래서 이렇게 해보니까 안되더라고요. 답은 잘 나오는 것 같은데..

이 방법으로 가능한지가 궁금해요. 처음에 떠오른 아이디어거든요.

dp[i][1] = dp[i][0];
answer = max(answer, dp[i][0]);
int value = arr[i];
for (int j = i + 1; j < n; j++)
{
if (value > arr[j] && dp[j - 1][1] + 1 > dp[j][1])
{
dp[j][1] = dp[j - 1][1] + 1;
value = arr[j];

}
else
{
dp[j][1] = dp[j - 1][1];
}
answer = max(answer, dp[j][1]);
}

답답해서 다른 분 코드보고 따로 구하는 게 중요한 것 같아서 풀이는 냈는데. 처음에 아이디어가 가능한지 궁금합니다.

jiwoo2211   2년 전

https://www.acmicpc.net/board/view/32529의 2번 내용이 작성자님이 질문하신 내용인것 같아요

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