(백준/c++) 11054번 - 가장 긴 바이토닉 부분수열📃 coding test/◽ 백준2021. 8. 18. 16:18
Table of Contents
728x90
11054번: 가장 긴 바이토닉 부분 수열 (acmicpc.net)
11054번: 가장 긴 바이토닉 부분 수열
첫째 줄에 수열 A의 크기 N이 주어지고, 둘째 줄에는 수열 A를 이루고 있는 Ai가 주어진다. (1 ≤ N ≤ 1,000, 1 ≤ Ai ≤ 1,000)
www.acmicpc.net
* 문제 풀이 알고리즘
문제 내에 있는 예제를 예시로 들면,
{1 5 2 1 4 3 4 5 2 1} 에서 가장 긴 바이토닉 부분 수열은
{1, 2, 3, 4, 5, 2, 1} = 답 7이 됩니다.
밑에 작성한 알고리즘은 왼쪽에서 부터 증가하는 부분 수열의 DP(InC)와
오른쪽에서 부터 증가하는 부분 수열의 DP(DeC)를 구해서 그 합 중 가장
큰 수가 해답이 되도록 작성하였습니다.
InC = { 1, 2, 2, 1, 3, 3, 4, 5, 2, 1 }
DeC = { 1, 5, 2, 1, 4, 3, 3, 3, 2, 1 }
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
InC = { 1, 2, 2, 1, 3, 3, 4, 5, 2, 1 } | |
DeC = { 1, 5, 2, 1, 4, 3, 3, 3, 2, 1 } | |
#include <iostream> | |
#include <vector> | |
#include <algorithm> | |
using namespace std; | |
int main(void) | |
{ | |
std::ios::sync_with_stdio(false); | |
std::cin.tie(); | |
std::cout.tie(); | |
// =========================== | |
int N; cin >> N; | |
vector<int> seq(N); | |
for (int i = 0; i < N; i++) | |
cin >> seq[i]; | |
// =========================== | |
vector<int> InC(N,1), DeC(N,1); | |
for(int i =1; i < N; i++) | |
for (int j = 0; j < i; j++) | |
{ | |
if (seq[i] > seq[j]) | |
InC[i] = max(InC[j] + 1, InC[i]); | |
if(seq[N-i-1]>seq[N-j-1]) | |
DeC[N - i - 1] = max(DeC[N - j - 1 ] + 1, DeC[N - i - 1]); | |
} | |
// =========================== | |
int _max = -1000; | |
for (int i = 0; i < N; i++) | |
{ | |
if (_max < InC[i] + DeC[i]) | |
_max = InC[i] + DeC[i]; | |
} | |
cout << _max - 1; | |
} | |
728x90
'📃 coding test > ◽ 백준' 카테고리의 다른 글
(백준/c++)1780번 - 종이의 개수 (0) | 2022.01.18 |
---|---|
(백준/c++) 5430번 - AC (0) | 2022.01.17 |
(백준/c++) 1504번 - 특정한 최단경로 (0) | 2020.09.14 |
(백준/c++) 1753번 - 최단경로 (0) | 2020.09.13 |
00. 알고리즘 시작 (책 추천) (3) | 2020.07.05 |
@핑크코냥 :: 핑크코냥
안 하는 것 보다 낫겠지
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!