UVA10037

来源:互联网 发布:win32编程还有用吗 编辑:程序博客网 时间:2024/06/03 09:35

题意:有N个人要过桥,每个人速度不同,只有一个手电筒,每次最多只能过去两个人,问所有人最短的过桥时间为多少

题解:贪心法解决问题

            当人数小于等于3时分情况讨论,大于等于4时,有两种贪心策略:

            1.最快速度的人每次带一个当前速度最慢的人过去,自己返回;再带一个当前速度最慢的人过去, 再返回

            2.最快速度的人和速度第二快的人一起过去;

               最快速的人返回,速度最慢的两个人一起过去;

               速度第二快的人返回

         (每次循环把当前速度最慢的两个人带到河岸)

代码:

#include <iostream>#include <cstdio>#include <algorithm>#include <cstring>#include <cmath>using namespace std;const int maxn=1500;int speed[maxn];int main(){     int T;     int n;     int i;     scanf("%d",&T);     while(T--)     {         scanf("%d",&n);         for(int i=0;i<n;i++)            scanf("%d",&speed[i]);            sort(speed,speed+n);         int sum=0;         int p=n;         int t;            for(i=n-1;i>=3;i-=2)            {                int t1=2*speed[0]+speed[i]+speed[i-1];                int t2=2*speed[1]+speed[0]+speed[i];                sum+=min(t1,t2);            }         if(i==0) sum+=speed[0];         else if(i==1) sum+=speed[1];         else sum=sum+speed[0]+speed[1]+speed[2];         printf("%d\n",sum);         for(int i=n-1;i>=3;i-=2)         {             int t1=2*speed[0]+speed[i]+speed[i-1];             int t2=2*speed[1]+speed[0]+speed[i];             if(t1<t2)             {                 printf("%d %d\n",speed[0],speed[i]);                 printf("%d\n",speed[0]);                 printf("%d %d\n",speed[0],speed[i-1]);                 printf("%d\n",speed[0]);             }             else             {                 printf("%d %d\n",speed[0],speed[1]);                 printf("%d\n",speed[0]);                 printf("%d %d\n",speed[i-1],speed[i]);                 printf("%d\n",speed[1]);             }         }         if(i==1) printf("%d %d\n",speed[0],speed[1]);         else if(i==2)         {            printf("%d %d\n",speed[0],speed[1]);            printf("%d\n",speed[0]);            printf("%d %d\n",speed[0],speed[2]);         }         else            printf("%d\n",speed[0]);         if(T) cout<<endl;     }    return 0;}


0 0
原创粉丝点击