import java.util.*; import java.util.Objects; import java.util.ArrayList; /** feuille du motif composite */ public class Chef extends Person { private List grp; public boolean addSubalterne(Person p){ return grp.add(p); } /** constructeur * * @param n fun factor * */ public Chef(int n){ super(n); this.grp = new ArrayList<>(); // d'autres choses peut-être. } /** * La meilleure fête avec moi, c'est la meilleure fête sans mes subalternes pour eux plus moi. * * @return retourne la valeur de la meilleure fête en invitant seulement les gens dont cette personne est le ou la supérieure hiérarchique, mais pas elle. * */ public int bestPartyWithoutMe(){ int total = 0; for (Person p : grp) { total += p.bestParty(); // Chaque subalterne peut choisir de venir ou non } return total; } /** * La meilleure fête est soit sans moi (c'est l'union des meilleures fêtes de mes subalternes). * soit c'est la meilleure fête avec moi. * * @return la valeur de la meilleure fête en invitant seulement les gens dont cette personne est le ou la supérieure hiérarchique (peut-être avec elle). * */ public int bestParty(){ int sansMoi = bestPartyWithoutMe(); int avecMoi = getFunFactor(); for (Person p : grp) { avecMoi += p.bestPartyWithoutMe(); // Si je viens, mes subalternes ne peuvent pas venir } return Math.max(sansMoi, avecMoi); } }