//https://www.acmicpc.net/problem/11054 #include <iostream> |
using namespace std; |
int main() |
{ |
int A[1001]; |
int dp[2][1001]; |
int N,x,max; |
cin >> N; |
for(int i=1; i<=N; i++) cin >> A[i]; |
dp[0][1]=0; |
dp[1][N]=0; |
//A[i]에서 이전까지의 원소들에 대한 증가 수열의 길이, 본인은 제외하고 카운트 |
for(int i=2; i<=N; i++) |
{ |
max=0; |
for(int j=i-1; j>0; j--) |
{ |
x=0; |
if(A[i]>A[j]) x=dp[0][j]+1; |
if(max<x) max=x; |
} |
dp[0][i]=max; |
} |
//A[i]에서 이후의 원소들에 대한 감소 수열의 길이, 본인은 제외하고 카운트 |
for(int i=N-1; i>=1; i--) |
{ |
max=0; |
for(int j=i+1; j<=N; j++) |
{ |
x=0; |
if(A[i]>A[j]) x=dp[1][j]+1; |
if(max<x) max=x; |
} |
dp[1][i]=max; |
} |
max=0; |
for(int i=1; i<=N; i++) |
if(max<(dp[0][i]+dp[1][i])) max=dp[0][i]+dp[1][i]; |
cout << max+1; |
} |
'알고리즘 문제 풀이 > 1DP_과제(~180615)' 카테고리의 다른 글
171211_5586_JOI와 IOI (0) | 2017.12.11 |
---|---|
171210_5218_알파벳 거리 (0) | 2017.12.10 |
171210_11053_가장 긴 증가하는 부분 수열 (0) | 2017.12.10 |
171209_11722_가장 긴 감소하는 부분 수열 (0) | 2017.12.09 |
171209_11055_가장 큰 증가 부분 수열 (0) | 2017.12.09 |