7개의 댓글이 있습니다.
-
-
Being -
1차원 문제를 O(N)에 해결하는 방법을 찾으시면 위에서 Sharifa님이 말씀하셨듯 2차원 문제는 O(N^3)에 해결하실 수 있으실 거예요. 힌트를 드리자면,
- 답은 배열의 모든 부분구간, 즉 \frac{N(N-1)}{2} 개의 구간 중 하나입니다.
- 이러한 구간들을, 마지막 원소의 위치별로 묶을 수 있습니다. 예를 들어 5번 원소가 마지막인 구간은 [1, 5], [2, 5], \cdots, [5, 5] 까지 있을 수 있겠지요.
- k번 원소가 마지막인 여러 구간들 중 가장 큰 합을 내는 구간이 무엇인지 알고 있다고 가정해 보죠. 이 정보를 바탕으로 k+1번 원소가 마지막인 경우에 대한 가장 큰 합을 내는 구간을 알아낼 수 있을까요?
10년 전 link
-
-
-
amievil2 -
흠... 원소의 집합을 N = {n_1, n_2 ..... n_N} 라고 하고 마지막 원소가 n_k이고 합이 최대값을 갖는 구간을 [n_a, n_k]라고 하면 k+1 번째 최대합 구간은 1. [n_a, n_k]의 합이 > 0 이면 [n_a, n_k+1] 2. [n_a, n_k]의 합이 <= 0 이면 [n_k+1, n_k+1] 이 되는 건가요? 이렇게 k=1 ~ k=N 까지 진행하면서 매번 합의 크기를 비교해 최대값을 저장해 놓으면 될까요? 이렇게 하면 2차원일 때는 이런 반복을 N(N-1)/2 만큼 반복해 주면 될것 같은데..... 제 생각이 맞나요?
10년 전 link
-
-
정회원 권한이 있어야 커멘트를 다실 수 있습니다. 정회원이 되시려면 온라인 저지에서 5문제 이상을 푸시고, 가입 후 7일 이상이 지나셔야 합니다. 현재 문제를 푸셨습니다.
amievil2
NxN 행렬이 있습니다. 각 칸마다 숫자들이 들어 있습니다. 이때 행렬위에 직사각형이던 정사각형이던 아무 사각형을 만든다음에 그 사각형 안의 숫자의 합이 최대가 되게 하려고 합니다. 뭐 전체 경우를 다 계산하면 되겠지만 N이 커지면 경우의 수가 너무 많아서 힘들어 지더군요. 이런 식의 문제는 어떻게 접근해야 할까요?
아시는 분들 도움 부탁드려요.
10년 전