笔试题

 

https://www.it610.com/article/1292725406771781632.htm

1.第一短的带第二短,然后第一短的回来

2.第一张带第二张,然后第二短回来

 

#include
#include
#include
  using namespace std;
 
  
  int main()
  {
      int n,i,b,T;
      cin >> T;
     while(T--)
     {
         cin >> n; 
         vector time(n, 0);
         for(i=0;i < n ; i++)
         {
             cin >> time[i]; 
             
         }
         sort(time.begin(),time.end());
         int sum=0;
         while(n>3)
         {
             if(2*time[1]+time[0]>2*time[0]+time[n-2])
                 sum+=2*time[0]+time[n-2]+time[n-1];
             else
                 sum+=2*time[1]+time[0]+time[n-1];//最短的带第二短的, 然后最长的带第二长的 , 然后第二短的回来
                 n-=2;
         }
         if(n==3)
         sum+=time[1]+time[0]+time[2];
         if(n==2)
         sum+=time[1];
         if(n==1) sum += time[0];
         cout << sum << endl;
     }
     return 0;
 }

 

你可能感兴趣的:(秋招复习)