标签:
Time Limit: 1000MS | Memory Limit: 10000K | |
Total Submissions: 11814 | Accepted: 4476 |
Description
Input
Output
Sample Input
1 4 1 2 5 10
Sample Output
17
题目大意&解题思路:
一些人想要过河,例如4个人过河的所需时间分别为:1,2,5,10
那么过河有两种方法:
1. 1与2,1回来,1与5,1回来,1与10 结果耗时19
2. 1yu2,2回来,5与10,1回来,1与2 结果耗时15
总结两种方法:
设 x,y为最快和次快,a,b为次慢和最慢
那么第一种耗时t=y+x+a+x+b
第二种耗时t=y+y+b+x+y
重点就在于2*y和x+a谁大谁小
根据贪心的思想,每一次都比较一下呗
谁小选谁
代码:
#include"iostream"
#include"algorithm"
using namespace std;
int a[1010];
int main()
{
int T,n,sum;
cin>>T;
while(T--){
cin>>n;
for(int k=0;k<n;k++){
cin>>a[k];
}
sum=0;
sort(a,a+n);
if(n==1)
sum+=a[0];
while(n>1)
{
if(n==2)
sum+=a[1];
if(n==3)
sum+=(a[0]+a[1]+a[2]);
if(n>=4)
{
if(2*a[1]-a[n-2]-a[0]<0)
{
sum+=(a[0]+2*a[1]+a[n-1]);
}
else
{
sum+=(2*a[0]+a[n-2]+a[n-1]);
}
}
n-=2;
}
cout<<sum<<endl;
}
return 0;
};
标签:
原文地址:http://www.cnblogs.com/zsyacm666666/p/4652644.html