• Crossing River


    题目链接:http://acm.hust.edu.cn/vjudge/problem/visitOriginUrl.action?id=26251

    题目大意:

         渡河问题,多组案例T(1<=T<=20),每个案例中有N(N<=1000)个人。每一次渡河最多两人一起,渡河时长按速度慢的即耗时最长的计算,分别给出N个人渡河所需时间(不超过100s),问:怎样安排可以让所有人渡过河且耗时最短?

         案例:

                  Sample Input

                  1
                  4
                  1 2 5 10
    

                 Sample Output

                 17

    题目分析:

         分情况讨论(运用条件判别语句),如果仅有一人渡河,则耗时为其渡河时长;如果有两人渡河,按耗时最长的计算渡河时长;如果三人渡河(需要注意的是两人渡河后须有一人划船返回),不管采用何种方式,渡河时长均为三人渡河时长累加;如果超过三人以上的人渡河,则有两种快速过河方式:将时长从小到大排序(sort语句)1.始终让最快的人接送他人;2.让最快和次快的人合力接送,譬如a[0]和a[1]先渡河,a[1]回,再a[N-1]和a[N-2]渡河,a[1]回,如此循环。则将a[N-1]和a[N-2]渡河有两种方式,采取耗时最短的即可。

    源代码:

     1 #include<cstdio>
     2 #include<algorithm>
     3 using namespace std;
     4 const int maxn=1000;
     5 int a[maxn];
     6 int main()
     7 {
     8     int T,n,j,k,count,count1,count2;
     9     scanf("%d",&T);//案例数
    10     for(k=0;k<T;k++)
    11     {   count=0;
    12         scanf("%d",&n);//渡河人数
    13         for(j=0;j<n;j++)
    14             scanf("%d",&a[j]);//个人渡河时长
    15         sort(a,a+n);//排序
    16         while(n)//未渡河的人中耗时最长的两人渡河
    17         {     if(n==1) 
    18              { count+=a[0];
    19                break;}
    20              else if(n==2)
    21              {    count+=a[1];
    22                   break;}
    23              else if(n==3)
    24              {    count+=a[0]+a[1]+a[2];
    25                   break;}
    26              else
    27              {    count1=a[1]+a[0]+a[n-1]+a[1];//两人使用第一快速渡河法渡河耗时
    28                   count2=a[n-1]+a[0]+a[n-2]+a[0];//两人使用第二快速渡河法渡河耗时
    29                   if(count1<count2) count+=count1;//最短耗时长累计
    30                   else count+=count2;
    31              }
    32              n-=2;
    33         }
    34         printf("%d
    ",count);
    35     }
    36     return 0;
    37 }
  • 相关阅读:
    S2T40,第五章
    S2T40,第四章,简答5
    sqlmap扫描发现注入点示例
    使用jenkins部署.net项目
    在线预览PDF插件
    Visual Studio 2019 License Key
    asp.net core mvc 中 ModelState.IsValid 值是fasle
    sql操作
    sql server 查找与替换 正则表达式 匹配
    asp.net redis 帮助类封装
  • 原文地址:https://www.cnblogs.com/huaszjh/p/4656219.html
Copyright © 2020-2023  润新知