2534 渡河 2013年市隊選拔賽廣州
阿新 • • 發佈:2017-05-06
ide put 單位 過河 efault 100% art 時間 mat
樣例輸入 Sample Input
2534 渡河
2013年市隊選拔賽廣州
時間限制: 1 s 空間限制: 128000 KB 題目等級 : 黃金 Gold 題目描述 Description有N個人需要渡河到對岸,但是只有一條小船,只能乘坐兩人,請問怎麽能夠讓他們以最少的時間渡河到對岸呢?
輸入描述 Input Description輸入為兩行,第一行為渡河的人數N (1<=N<=1000)
第二行為N個正整數,範圍是 [1,100],代表他們劃船到對岸需要多少分鐘
輸出描述 Output Description輸出只有一行,代表最短的渡河時間,單位為分鐘
3
2 3 50
樣例輸出 Sample Output55
數據範圍及提示 Data Size & HintN (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 intt, 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年市隊選拔賽廣州