def sac_a_dos_force_brute(poids_max, objets): """ Résout le problème du sac à dos par force brute. Args: poids_max (int): Le poids maximal que le sac peut contenir. objets (list): Une liste de listes représentant chaque objet poids (position 0), valeur (position 1) et nom (position 2). Returns: tuple: Un tuple contenant la valeur totale maximale, le poids total maximal et la liste des objets sélectionnés. """ n = len(objets) meilleure_valeur = 0 meilleur_poids = 0 meilleur_selection = [] # Parcours toutes les combinaisons possibles (2^n) for i in range(2**n): valeur_actuelle = 0 poids_actuel = 0 selection_actuelle = "" # Vérifie chaque objet pour inclure ou non dans la combinaison actuelle for j in range(n): # Si le j-ème bit de i est 1, inclure l'objet j if (i >> j) & 1: objet = objets[j] poids_actuel += objet[0] valeur_actuelle += objet[1] selection_actuelle += objet[2] + " " # Vérifie si la combinaison actuelle est valide et meilleure que la meilleure trouvée jusqu'à présent if poids_actuel <= poids_max and valeur_actuelle > meilleure_valeur: meilleure_valeur = valeur_actuelle meilleur_poids = poids_actuel meilleur_selection = selection_actuelle return meilleure_valeur, meilleur_poids, meilleur_selection # Exemple d'application de la fonction sac_a_dos_force_brute() objets_disponibles = [ [2, 6, "clef"], [3, 10, "poule"], [4, 12, "rayon"], [5, 15, "roue"] ] poids_maximal_du_sac = 6 valeur_max, poids_max_rempli, objets_selectionnes = sac_a_dos_force_brute(poids_maximal_du_sac, objets_disponibles) print("Poids maximum du sac : ", poids_maximal_du_sac) print("Objets disponibles : ", objets_disponibles) print("Meilleure valeur totale : ", valeur_max) print("Poids total correspondant : ", poids_max_rempli) print("Objets sélectionnés : ", objets_selectionnes)