题意:输入数据个数、输入人数、输入一系列撑船用时,输出最短用时。
注意:船仅一艘,要来回用。
1 4 1 2 5 10Sample Output
17
假设四个人用时由短到长一次:a,b,c,d
有两种办法来处理四个撑船时间:
1.a b过去,a回来,c d过去,b回来(b+a+d+a)
2.a c过去,a回来,a d过去,a回来(c+a+d+a)
注意由于递归,所以要保证a,b在最后仍然在原位置。
#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
int T;
cin>>T;
while(T--)
{
int n,a[1008];
cin>>n;
for(int i=0;i<n;i++) cin>>a[i];
sort(a,a+n);
//for(int i=0;i<n;i++) cout<<a[i];
int time=0;
while(n)
{
if(n==1)
{
time+=a[0];
break;
}
else if(n==2)
{
time+=a[1];
break;
}
else if(n==3)
{
time+=a[2]+a[0]+a[1];break;
}
else
{
time+=min(2*a[1]+a[0]+a[n-1],2*a[0]+a[n-1]+a[n-2]);
n-=2;
}
}
cout<<time<<endl;
}
return 0;
}