Recursos-LCC

Um arquivo de todo material que consegui reunir, pertinente ao curso de LCC da UM.

View on GitHub

LA2 | Treino 3 | Válidas


"""
Um exemplo de um problema que pode ser resolvido de forma eficiente com 
programação dinâmica consiste em determinar, dada uma sequência arbitrária de 
números não negativos, se existe uma sub-sequência (não necessariamente contígua) 
cuja soma é um determinado valor. Implemente uma função que dado um valor e uma
listas de listas de números não negativos, devolva a lista com as listas com uma
sub-sequência cuja soma é o valor dado.
"""


def aux(sum,lst):
    conjunto = {0}
    for i in lst:
        aux = set()
        for e in conjunto:
            aux.add(e+i)
        conjunto = conjunto | aux
    return sum in conjunto
    

def validas(soma,listas):
    res = []
    for lista in listas:
        if aux(soma,lista):
           res.append(lista) 
    
    return res


Testes

# 1
soma = 10
listas = [[8,1,7,3,3,6,3,5],[1,1,1,2,3,1,2],[3,3,3,3]]
> Resultado = [[8,1,7,3,3,6,3,5],[1,1,1,2,3,1,2]]

# 2
capacidade = 5
listas = [[1,1,1,1,1],[2],[3,3,3,3,3,3,3],[4],[5,5,5,5,5]]
> Resultado = [[1,1,1,1,1],[5,5,5,5,5]]

retroceder