1. 程式人生 > >2534 渡河 2013年市隊選拔賽廣州

2534 渡河 2013年市隊選拔賽廣州

ide put 單位 過河 efault 100% art 時間 mat

2534 渡河

2013年市隊選拔賽廣州

時間限制: 1 s 空間限制: 128000 KB 題目等級 : 黃金 Gold 題目描述 Description

有N個人需要渡河到對岸,但是只有一條小船,只能乘坐兩人,請問怎麽能夠讓他們以最少的時間渡河到對岸呢?

輸入描述 Input Description

輸入為兩行,第一行為渡河的人數N (1<=N<=1000)

第二行為N個正整數,範圍是 [1,100],代表他們劃船到對岸需要多少分鐘

輸出描述 Output Description

輸出只有一行,代表最短的渡河時間,單位為分鐘

樣例輸入 Sample Input

3

2 3 50

樣例輸出 Sample Output

55

數據範圍及提示 Data Size & Hint

N (1<=N<=1000)

 1 #include<cstdio>
 2 #include<iostream> 
 3 #include<cmath>
 4 #include<algorithm>
 5 
 6 using namespace std;
 7 
 8 int speed[1001];
 9 
10 int main()
11 {
12     int
t, n, tmp; 13 scanf("%d", &n); 14 for(int i=0; i<n; i++) 15 { 16 scanf("%d", &speed[i]); 17 } 18 for(int i=0; i<n; i++) 19 { 20 for(int j=i; j<n; j++) 21 { 22 if(speed[i] > speed[j])
23 { 24 tmp = speed[i]; 25 speed[i] = speed[j]; 26 speed[j] = tmp; 27 } 28 } 29 } 30 // greedy 31 int start = n, ans = 0; 32 while(start) 33 { 34 // start = 1,2,3時直接處理 35 if(start == 1) 36 { 37 ans += speed[0]; 38 break; 39 } 40 else if(start == 2) 41 { 42 ans += speed[1]; 43 break; 44 } 45 else if(start == 3) 46 { // 0,2過河,0回程,0,1過河 47 ans += speed[2]+speed[0]+speed[1]; 48 break; 49 } 50 // start>3根據策略選擇 51 else{ 52 ans += min(speed[1]+speed[0]+speed[start-1]+speed[1], speed[start-1]+2*speed[0]+speed[start-2]); 53 start -= 2; 54 } 55 } 56 printf("%d\n", ans); 57 58 return 0; 59 }

2534 渡河 2013年市隊選拔賽廣州