1 번째 시도
- 점화식
- dp[MAX_N][2]
- dp[i][0] : i번째까지 증가하는 가장 긴 수열의 크기
- dp[i][1] : i번째까지 감소하는 가장 긴 수열의 크기
- dp[i][0] = max(dp[j][0] + 1) (단, 1 <= j < i, input[j] < input[i])
- dp[i][1] = max(dp[j][0] + 1, dp[j][1] + 1) (단, 1 <= j < i, input[j] > input[i])
- 초기값 : dp[i][0] = dp[i][1] = 1 (단, 1 <= i <= N)
1
2
3
4
5
6
7
8
9
10
11
|
for (int i = 1; i <= N; i++)
dp[i][0] = dp[i][1] = 1;
for (int i = 2; i <= N; i++) {
for (int j = 1; j < i; j++) {
if (input[j] < input[i])
dp[i][0] = max(dp[i][0], dp[j][0] + 1);
else if (input[j] > input[i])
dp[i][1] = max(dp[i][1], max(dp[j][0], dp[j][1]) + 1);
}
}
|