function nb=hydre(h)
%HYDRE(H) calcule le nombre de générations pour éliminer des hydres.
% La fonction NB=HYDRE(H) calcule le nombre de générations NB permettant 
% d'éliminer toutes les hydres données selon la configuration H.
% Exemple: nb=hydre([2 2 1 1]) indique qu'il faut 17 étapes pour
% éliminer deux hydres à deux têtes et deux hydres à une tête. 
% Conseil: prendre des nombres petits, les calculs sont longs.

% jbr, 25-297.

nb=1;				% nombre de générations
nb=nb+sum(h==1);	% nbre d'hydres à une tête
h=h(find(h~=1));	% élimination des hydres à une tête
while sum(h)>1
	i=find(min(h)==h);	% recherche du plus petit
	i=i(1);				% le premier seulement
	if h(i)==2
		nb=2*nb+1;		% on élimine directement l'hydre 
		h=h([1:i-1,i+1:length(h)]); % on enlève l'hydre en question
	else
		h(i)=h(i)-1;	% on coupe une tête à chaque étape
		hr=h(i);		% hydre à reproduire
		h=[h hr*ones(1,nb)]; % on ajoute autant d'hydres que de générations
	end
	nb=nb+1;			% incrémentation des générations
end
nb=nb-1;				% rectificatif pour la dernière hydre
