Le test n°3 indique un dépassement de mémoire (115,7 Mio)
Mon idée est prétraiter les données de l'énoncer pour séparer les animaux en groupes d'amis (par un parcours de graphe) auquel j'associe le poids (somme des poids des amis constituant le groupe) et le nombre d'animaux.
J'ai donc deux listes de longeur k (nombre de groupes d'amis): poids et nombre_danimaux, où le groupe d'amis i comprend nombre_danimaux[i] animaux et pèse poids[i]
Il s'agit donc de déterminer un sous ensemble de [|0, k|] qui maximise la somme des nombre_danimaux en respectant la contrainte de poids. J'ai donc simplement listé l'ensemble des parties de [|0, k|] (en éliminant systématiquement ceux dont le poids dépasse la capacité) et j'en prends le maximum.
Cependant la taille de cette liste étant 2^k, je dépasse rapidement la limite de mémoire. Y'a-t-il un autre moyen de trouver ce sous-ensemble sans avoir à tous les lister explicitement? Malheureusement je ne peux pas les détruire au fur et à mesure que je change la valeur de mon maximum, car je construits les sous ensembles à partir des autres sous ensemble déjà formés.
comment faire pour utiliser moins de mémoire?