• 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 }
  • 相关阅读:
    测试JavaScript
    从零开始部署小型企业级虚拟桌面 -- Vmware Horizon View 6 For Linux VDI -- 概念简介
    怎样向IT行业的朋友说明《圣经》的重要性
    关于爱剪辑、会声会影、美图秀秀
    快速登录IRC网络聊天室
    如何写一篇好的搭建教程
    从零开始部署小型企业级虚拟桌面 -- Vmware Horizon View 6 For Linux VDI
    Oracle工程师技能树
    论万金油的悲哀
    自定义地图开发(一)
  • 原文地址:https://www.cnblogs.com/huaszjh/p/4656219.html
Copyright © 2020-2023  润新知