scusa per il disturbo ma il programma lo stesso stampa tutte le portate senza distinzione.. Potresti ricontrollare la codifica gentilmente?

codice:
#include<iostream>
# include<cmath>
using namespace std;
int n,k,i;
int portate[5];
int binario[5]= {0, 0, 0, 0, 0}; 
int binario_migliore[5];  
     void carica ()
    {
    	for (i=0;i<n;i++)
    	{
		
    	cout<<"Inserire elemento vettore reale "<<i+1<<endl;
    	cin>>portate[i];
    }
	}
	void prossima_combinazione ()
	{
	int pos = - 1;
    while(pos >= 0 && portate[pos] == 1) {
        portate[pos] = 0;
        pos--;
    }
    if(pos >= 0) 
        portate[pos] = 1;
    
}


     void somma() {
    int somma = 0;
    int min;
    for(int i=0; i<n; ++i) {
        if(binario[i] == 1){
		
            somma += portate[i];
            if (somma>=k)
            {
            	min=somma;
            	if(somma<min)
            	somma=min;
            	binario[i]=binario_migliore[i];
			}
                 
    }
   
    
	}
}




  stampa_finale()
  {
  
std::cout << "Portate da mangiare: " << std::endl;
    for(int i=0; i<n; ++i) {
        std::cout << portate[i];
        if(binario_migliore[i] == 1) {
            std::cout << "   *";
        }
        std::cout << std::endl;
    }
}
	int main()
{


	cout<<"Inserire numero di portate P"<<endl; cin>>n;
	cout<<"Inserire K minimo"<<endl; cin>>k;
	carica();
prossima_combinazione();
somma();
stampa_finale();
	system("pause");
return (0);
}