青青草原上的羊羊们被灰太狼追到了的河边,河边有一座小桥,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(); //被这句代码坑了一天,此句话的意思时当最后一个样例输出结果后,将不再打印空行
}
}
}