728x90
반응형
https://www.acmicpc.net/problem/11054
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int n;
vector<int> arr(1001, 0);
vector<int> dp(1001, 1);
vector<int> r_dp(1001, 1);
int main() {
cin >> n;
for(int i = 0; i < n; i++){
cin >> arr[i];
}
for(int y = 0; y < n; y++){
for(int x = 0; x < y; x++){
if(arr[x] < arr[y])
dp[y] = max(dp[y], dp[x] + 1);
}
}
for(int y = n - 1; y >= 0; y--){
for(int x = n - 1; x >= y; x--){
if(arr[x] < arr[y])
r_dp[y] = max(r_dp[y], r_dp[x] + 1);
}
}
int ans = 0;
for(int i = 0; i < n; i++){
ans = max(dp[i] + r_dp[i] - 1, ans);
}
cout << ans << endl;
return 0;
}
dp에는 자기 이전에 있는 원소들에 대한 증가하는 부분수열을, r_dp에는 자기 이후에 있는 원소들에 대한 감소하는 부분수열을 저장한다. 모든 원소들의 (dp값 + r_dp값 - 1) 중 최댓값이 정답이 된다. 해당 원소가 중복되기 때문에 -1을 해주어야 한다.
728x90
반응형
'Algorithm > BAEKJOON' 카테고리의 다른 글
[BOJ] 5502번 팰린드롬 (C++) (0) | 2022.11.11 |
---|---|
[BOJ] 12015번 가장 긴 증가하는 부분 수열 2 (C++) (0) | 2022.11.07 |
[BOJ] 2156번 포도주 시식 (C++) (1) | 2022.11.05 |
[BOJ] 1021번 회전하는 큐 (C++) (0) | 2022.11.05 |
[BOJ] 1261번 알고스팟 (C++) (0) | 2022.11.04 |