Time Limit: 1000MS | Memory Limit: 65536K | |
Total Submissions: 4026 | Accepted: 1646 |
Description
A group of N travelers (1 ≤ N ≤ 50) has approached an old and shabby bridge and wishes to cross the river as soon as possible. However, there can be no more than two persons on the bridge at a time. Besides it's necessary to light the way with a torch for safe crossing but the group has only one torch.
Each traveler needs ti seconds to cross the river on the bridge; i=1, ... , N (ti are integers from 1 to 100). If two travelers are crossing together their crossing time is the time of the slowest traveler.
The task is to determine minimal crossing time for the whole group.
Input
The input consists of two lines: the first line contains the value of N and the second one contains the values of ti (separated by one or several spaces).
Output
The output contains one line with the result.
Sample Input
4 6 7 6 5
Sample Output
29
AC代码:
#include <stdio.h>
#include <algorithm>
using namespace std;
int a[105];
int main(){
int n,i,p,ans;
scanf("%d",&n);
for(i=0;i<n;i++)
scanf("%d",&a[i]);
if(n==1)
printf("%d\n",a[0]);
else{
sort(a,a+n);
ans=0;
while(n){
if(n==1)
ans+=a[0],n=0;
else if(n==2)
ans+=a[1],n=0;
else if(n==3)
ans+=a[0]+a[1]+a[2],n=0;
else{
if(2*a[0]+a[n-2]+a[n-1]>a[0]+2*a[1]+a[n-1])
ans+=a[0]+2*a[1]+a[n-1];
else
ans+=2*a[0]+a[p-2]+a[n-1];
n-=2;
}
}
printf("%d\n",ans);
}
return 0;
}