3 개의 고전적 인 우선 대기 열 문제

3764 단어 대열
                ,            ,            ,                        ,                      ,              ,       ,                      ,  stl queue             ,             priority_queue   。

       
Time Limit: 1000ms, Special Time Limit: 2500ms, Memory Limit: 32768KB  
Total submit users: 23, Accepted users: 10  
Problem 10611 : No special judgement  
Problem description  
      ,                 。              N  。         L1 ,L2 ,…,LN ( 1≤L1 ,L2 ,…,LN ≤1000 ,     )     。 ∑Li (i=1,2,…,N)           。                     。 
      ,                    ,         1       1     。  ,  N=3 , L1 =3,L2 =4,L3 =5 ,       12 ,         , :   12    3+9. ,   12   ,   9    4+5 ,   9   ,     21   ;      12    4+8 ,   12   ,   8    3+5 ,   8   ,     20   。  ,         。 
    ,                    ? 

 
Input  
               N(2≤N≤150,000) ; 
      N   ,        Li (1≤Li ≤1000) 。 

 
Output  
          ,     ,            。             231 -1 。 

 
Sample Input  
4
3
5
7
11
 
Sample Output  
49 
Problem Source  
  2010            
 

 

               ,         ;

[cpp:firstline[1]] view plaincopyprint?#include    
#include    
struct cmp  
{  
    bool operator ()(const int &i,const int &j)  
    {  
        return i>j;  
    }  
};  
using namespace std;  
int main()  
{  
    priority_queue,cmp> s;  
    int n;  
    while(cin>>n)  
    {  
        for(int i=0;i=2)  
        {  
            int a,b;  
            a=s.top();  
            s.pop();  
            b=s.top();  
            s.pop();  
            s.push(a+b);  
            //cout<#include 
struct cmp
{
bool operator ()(const int &i,const int &j)
{
return i>j;
}
};
using namespace std;
int main()
{
priority_queue,cmp> s;
int n;
while(cin>>n)
{
for(int i=0;i=2)
{
int a,b;
a=s.top();
s.pop();
b=s.top();
s.pop();
s.push(a+b);
//cout<#include    
struct cmp  
{  
bool operator ()(const int &i,const int &j)  
{  
return i>j;  
}  
};  
using namespace std;  
int main()  
{  
priority_queue,cmp> s;  
int n;  
while(cin>>n)  
{  
for(int i=0;i=2)  
{  
int a,b;  
a=s.top();  
s.pop();  
b=s.top();  
s.pop();  
s.push(a+b);  
//cout<#include 
struct cmp
{
bool operator ()(const int &i,const int &j)
{
return i>j;
}
};
using namespace std;
int main()
{
priority_queue,cmp> s;
int n;
while(cin>>n)
{
for(int i=0;i=2)
{
int a,b;
a=s.top();
s.pop();
b=s.top();
s.pop();
s.push(a+b);
//cout<#include    
struct cmp  
{  
bool operator ()(const int &i,const int &j)  
{  
return i>j;  
}  
};  
using namespace std;  
int main()  
{  
int b[10003];  
priority_queue,cmp> s;  
int n;  
while(cin>>n)  
{  
for(int i=0;i
#include 
struct cmp
{
bool operator ()(const int &i,const int &j)
{
return i>j;
}
};
using namespace std;
int main()
{
int b[10003];
priority_queue,cmp> s;
int n;
while(cin>>n)
{
for(int i=0;i
priority_queue  q;
이것 은 크 고 작은 대열 에 따 른 것 이다.
#include 
struct cmp
{
bool operator ()(const int &i,const int &j)
{
return i>j;
}
};
priority_queue  q;
이것 은 어 릴 때 부터 큰 우선 대열 이다.

좋은 웹페이지 즐겨찾기