package com.interview.dynamic;
/**
* http://www.geeksforgeeks.org/dynamic-programming-set-15-longest-bitonic-subsequence/
*/
public class BitonicSequence {
public int longestSequence(int arr[]){
int lis[] = new int[arr.length];
int lds[] = new int[arr.length];
for(int i=0; i < arr.length; i++){
lis[i] = 1;
lds[i] = 1;
}
for(int i=1 ; i < arr.length; i++){
for(int j=0; j < i ; j++){
if(arr[i] > arr[j]){
lis[i] = Math.max(lis[i], lis[j] + 1);
}
}
}
for(int i = arr.length-2; i >=0 ; i--){
for(int j = arr.length-1; j > i; j--){
if(arr[i] > arr[j]){
lds[i] = Math.max(lds[i], lds[j] + 1);
}
}
}
int max = 0;
for(int i=0; i < arr.length; i++){
if(max < lis[i] + lds[i]-1){
max = lis[i] + lds[i] -1;
}
}
return max;
}
public static void main(String args[]){
BitonicSequence bs = new BitonicSequence();
int[] arr = {1,4,3,7,2,1,8,11,13,0};
int r = bs.longestSequence(arr);
System.out.print(r);
}
}