Untitled

mail@pastecode.io avatar
unknown
python
a year ago
2.0 kB
0
Indexable
Never
def L_Convex_S(A, left=0, mid=1, right=2, first_insert=True):
    """
    A: given list
    left: left number
    mid: middle number
    right: right number
    first_insert: tracks if this is the first item being added to x. we add 3 numbers the first time, and then 1 after that that meets x's requirements
    """
    # if right end goes past len(A) OR left is the same as middle index OR middle is the same as right index
    if right >= len(A) or left >= mid or mid >= right:
        return 0  #return 0 because we can't add any numbers to the sub-sequence x
    
    # iterate through all combinations of left, middle, and right numbers. Keep ignoring the eligibility for x
    ignore = max(L_Convex_S(A, left+1, mid, right, first_insert), L_Convex_S(A, left, mid+1, right, first_insert), L_Convex_S(A, left, mid, right+1, first_insert))
    best = ignore

    # check eligibility for left, mid, nect to be part of x subsequence
    if A[left]+A[right] > 2*A[mid]:
        # if the first item being inserted
        if first_insert:
            # set first_insert to false
            first_insert = False
            # check for all remaining items to right (after we added left and mid to sub-seq)
            x = L_Convex_S(A, mid, right, right+1, first_insert)
            # since this is the first time we added a subsequence, increament by 3
            include = 3 + x
        else:
            # check for all remaining items after right
            x = L_Convex_S(A, mid, right, right+1, first_insert)
            include = 1 + x
        # get the best from either ignoring or including this sub-seq
        if include > best:
            best = include
    return best

print(L_Convex_S([1,2,3,14,5])) # 3
print(L_Convex_S([1,2,4,8,10,13])) # 5
print(L_Convex_S([1,3,2,2,4,1])) # 4
print(L_Convex_S([11,2,3,10])) # 4
print(L_Convex_S([11,2,3,7])) # 4
print(L_Convex_S([11,20,3])) # 0
print(L_Convex_S([3,2,2])) # 3
print(L_Convex_S([11,2,3,1,1,1,5,10])) # 6