码迷,mamicode.com
首页 > 其他好文 > 详细

nyoj-47-过河问题|POJ-1700-Crossing River

时间:2014-11-25 22:57:00      阅读:168      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   io   color   os   sp   for   on   

http://acm.nyist.net/JudgeOnline/problem.php?pid=47

http://poj.org/problem?id=1700 

 

解题思路:求最少需要多少时间才能都通过。先将每个人过河所需的时间升序排序

 

 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 #include <string.h>
 4 
 5 int a[1010];
 6 int n, t, i;
 7 int ans;
 8 
 9 int cmp(const void *a, const void *b){
10     return *(int *)a - *(int *)b;
11 }
12 
13 void solve(){
14     ans = 0;
15     while(n){
16         if(n == 1){
17             ans += a[1];
18             break;
19         }
20         else if(n == 2){
21             ans += a[2];
22             break;
23         }
24         else if(n == 3){
25             ans += a[1] + a[2] + a[3];
26             break;
27         }
28         else{
29             //人较多的情况下,判断是先把走得最慢的两个人送过去合算还是先把走得最快和最慢的人先送过去
30             if(2 * a[2] > a[1] + a[n - 1]){
31                 ans += (a[n - 1] + a[n] + 2 * a[1]);
32             }
33             else{
34                 ans += (a[1] + 2 * a[2] + a[n]);
35             }
36             n -= 2;
37         }
38     }
39     printf("%d\n", ans);
40 }
41 
42 int main(){
43     scanf("%d", &t);
44     while(t--){
45         scanf("%d" ,&n);
46         for(i = 1; i <= n; i++){
47             scanf("%d", &a[i]);
48         }
49         qsort(a + 1, n, sizeof(a[1]), cmp);
50         solve();
51     }
52     return 0;

53 } 

 

nyoj-47-过河问题|POJ-1700-Crossing River

标签:style   blog   http   io   color   os   sp   for   on   

原文地址:http://www.cnblogs.com/angle-qqs/p/4121903.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!