acm_GREEDY_排队

/*
 *有N个人排队到R个水龙头去打水,他们装满水桶的时间
 *为T1,T2,…,Tn为整数且各不相等,应如何安排他们
 *的打水顺序才能使他们花费的时间最少?
 *分析:由于排队时,越靠前面的计算的次数越多,显然越小
 *的排在越前面得出的结果越小(可以用数学方法简单证明,
 *这里就不再赘述),所以这道题可以用贪心法解答
 */
/*------------ INCLUDES ---------------*/
#include 
< cstdlib >
#include 
< iostream >
#include 
< queue >
#include 
< fstream >
/*------------ INCLUDES ---------------*/

/*--------------- STD -----------------*/
using std::ifstream;
using std::queue;
using std::vector;
using std::greater;
using std::priority_queue;
/*--------------- STD ----------------*/

/*------------ GLOBAL VAL ------------*/
int   M[ 5 ];
/*------------ GLOBAL VAL ------------*/

/*--------------- MAIN ---------------*/
int  main( int  argc, char  * argv[])
{   ifstream  Fin;
    Fin.open(
" queue.txt " );
    
    priority_queue
< int ,vector < int > ,greater < vector < int > ::value_type >   >    iqueue;
    
    
int  a;
    
while (Fin >> a)
    {
       iqueue.push(a);
    }
    
    
int  flag = 0 ;
    
int  i = 0 ;
    
    
while (!iqueue.empty())
    {
      
if (flag == 0 )
      {M[i]
= iqueue.top();
       iqueue.pop(); 
       i
++ ;     
       
if (i == 5 )
       flag
= 1 ;
      }
      
else   if (flag == 1 )
      {
       M[i]
= iqueue.top();
       iqueue.pop(); 
       i
-- ;
       
if (i == 0 )
       flag
= 0 ;    
      }
      
    }
    
    system(
" PAUSE " );
    return EXIT_SUCCESS;
}
/*--------------- MAIN ---------------*/

你可能感兴趣的:(acm_GREEDY_排队)