Question: 
Write a function to find the longest bitonic subsequence for the given array.


Model's Code:
def lbs(arr):
    n = len(arr)
    if n == 0:
        return 0

    inc = [1] * n
    dec = [1] * n

    for i in range(1, n):
        for j in range(i):
            if arr[i] > arr[j]:
                inc[i] = max(inc[i], inc[j] + 1)

    for i in range(n - 2, -1, -1):
        for j in range(n - 1, i, -1):
            if arr[i] > arr[j]:
                dec[i] = max(dec[i], dec[j] + 1)

    max_length = 0
    for i in range(n):
        max_length = max(max_length, inc[i] + dec[i] - 1)

    return max_length



Sample Correct Code:
def lbs(arr): 
	n = len(arr) 
	lis = [1 for i in range(n+1)] 
	for i in range(1 , n): 
		for j in range(0 , i): 
			if ((arr[i] > arr[j]) and (lis[i] < lis[j] +1)): 
				lis[i] = lis[j] + 1
	lds = [1 for i in range(n+1)] 
	for i in reversed(range(n-1)): 
		for j in reversed(range(i-1 ,n)): 
			if(arr[i] > arr[j] and lds[i] < lds[j] + 1): 
				lds[i] = lds[j] + 1
	maximum = lis[0] + lds[0] - 1
	for i in range(1 , n): 
		maximum = max((lis[i] + lds[i]-1), maximum) 
	return maximum


Asserts:
assert lbs([0 , 8 , 4, 12, 2, 10 , 6 , 14 , 1 , 9 , 5 , 13, 3, 11 , 7 , 15]) == 7
assert lbs([1, 11, 2, 10, 4, 5, 2, 1]) == 6
assert lbs([80, 60, 30, 40, 20, 10]) == 5


Tests:
Test 1 of 3: PASS
Test 2 of 3: PASS
Test 3 of 3: PASS

Test 522 of 974: 385/522 (73.75478927203065%): success