羊羊过河

青青草原上的羊羊们被灰太狼追到了的河边,河边有一座小桥,4只小羊都在桥的同一边。
这时是晚上,他们只有一个手电筒,每次最多只能让两只羊同时过桥。不管是谁过桥,
不管是一只羊还是两只羊,必须要带着手电筒。手电筒必须要传来传去,不能扔过去。
每只羊过桥的速度不同,两只羊的速度必须以较慢的那只羊的速度过桥。如果他们自己过桥,
他们所需要的时间如下:
喜羊羊:过桥需要1分钟;
美羊羊:过桥需要2分钟;
懒羊羊:过桥需要5分钟;
慢羊羊:过桥需要8分钟.
求所有羊羊通过桥所需要的最短时间?

若总人数大于三,考虑情况(4)


import java.util.Arrays;
import java.util.Scanner;
public class B {
     static int[]a;
     static int n,m;
	public static void main(String[] args) {
		// TODO Auto-generated method stub
        Scanner sc=new Scanner(System.in);
        m=sc.nextInt();
        while(m-->0)   //规范写法
        {   
        	int ans=0;
        	n=sc.nextInt();
        	a=new int[n+1];  //确定了n的大小后再为a开辟空间
        	a[0]=0;
        	for(int i=1;i<=n;i++)
        	{
        		a[i]=sc.nextInt();
        	}
        	Arrays.sort(a);
        	int s=n;
        	while(s>3)  //当人数大于3时
        	{
        		if(a[1]+a[s-1]>2*a[2])  //比较(4)中两种情况哪一种耗时最短
        		{
        			ans+=a[2]+a[1]+a[s]+a[2];  //第一种情况

        			
        			s-=2;
        		}
        		else
        		{
        			ans+=a[s]+a[s-1]+a[1]+a[1]; //第二种情况
        			s-=2;
        		}
        	}
        	if(s==2)ans+=a[2];  //当人数为2时
        	if(s==3)ans+=a[1]+a[2]+a[3]; //当人数为3时
        	if(s==1)ans+=a[1];//当人数为1时
        	System.out.println(ans);
        	
        	int step=n;
        	while(step>3)
        	{
        		if(a[1]+a[step-1]>2*a[2])
        		{
        			System.out.println(a[1]+" "+a[2]);
        			System.out.println(a[1]);
        			System.out.println(a[step-1]+" "+a[step]);
        			System.out.println(a[2]);
        			step-=2;
                 }
        		else
        		{
  
        			System.out.println(a[1]+" "+a[step]);
        			System.out.println(a[1]);
        			System.out.println(a[1]+" "+a[step-1]);
        			System.out.println(a[1]);
        			step-=2;
        			
        		}
        	}
        	if(step==1)
        	{
        		System.out.println(a[1]);
        	}
        	if(step==2) {
        	   System.out.println(a[1]+" "+a[2]);
        	}
        	if(step==3)
            {System.out.println(a[1]+" "+a[2]);
    		System.out.println(a[1]);
    		System.out.println(a[1]+" "+a[3]);
        	}
        	if(m!=0)System.out.println();  //被这句代码坑了一天,此句话的意思时当最后一个样例输出结果后,将不再打印空行
        }
	}

}

猜你喜欢

转载自blog.csdn.net/qq_42167059/article/details/86792435