백준/백준-C++
11054번: 가장 긴 바이토닉 부분 수열
Beabletoet
2017. 6. 12. 15:13
#include<cstdio>
#include<algorithm>
#define max(a,b) (a>b)?a:b
int a[1000], ans1[1000], ans2[1000];
int main()
{
int n;
scanf("%d", &n);
for (int i = 0; i < n; ++i)
scanf("%d", &a[i]);
std::fill_n(&ans1[0], 1000, 1);
std::fill_n(&ans2[0], 1000, 1);
for (int i = 1; i < n; ++i)
for (int j = i - 1; j > -1; --j)
if (a[i] > a[j])
ans1[i] = max(ans1[i], ans1[j] + 1);
for(int i = n-2; i > -1; --i)
for(int j = i+1; j < n; ++j)
if (a[i] > a[j])
ans2[i] = max(ans2[i], ans2[j] + 1);
for (int i = 0; i < n; ++i)
ans1[i] = ans1[i] + ans2[i] - 1;
printf("%d", *(std::max_element(&ans1[0], &ans1[n])));
}