반응형
https://www.acmicpc.net/problem/11054
문제 해결 알고리즘
배열 양쪽에서 LIS알고리즘을 각각 수행해주고 두 dp 값의 합의 최댓값을 구해주면 된다.
DP로도 풀리게 나온 문제
소스 코드
#include <bits/stdc++.h>
using namespace std;
int arr[1001], dp[1001][2];
int main(){
int N; cin >> N;
for(int i=0;i<N;i++) cin >> arr[i];
dp[0][0] = 1;
for(int i=1;i<N;i++){
dp[i][0] = 1;
for(int j=0;j<i;j++){
if(arr[i] > arr[j] && dp[i][0] < dp[j][0] + 1) dp[i][0] = dp[j][0] + 1;
}
}
dp[N-1][1] = 1;
for(int i=N-2;i>=0;i--){
dp[i][1] = 1;
for(int j=N-1;j>i;j--){
if(arr[i] > arr[j] && dp[i][1] < dp[j][1] + 1) dp[i][1] = dp[j][1] + 1;
}
}
int result = 0;
for(int i=0;i<N;i++) {
result = max(result, dp[i][0] + dp[i][1] - 1);
}
cout << result;
}
반응형
'알고리즘 문제 해결 > BOJ' 카테고리의 다른 글
[BFS] BOJ 2665 미로만들기 (0) | 2023.02.11 |
---|---|
[다익스트라] BOJ 1719 택배 (2) | 2023.02.05 |
[DP] BOJ 13398 연속합 2 (C++) (0) | 2022.10.23 |
[그리디] BOJ 12931 두 배 더하기 (C++) (0) | 2022.10.20 |
[0-1 BFS] BOJ 1261 알고스팟 (C++) (0) | 2022.10.17 |