poj 1700

时间:2021-01-16 07:26:44

http://poj.org/problem?id=1700

题目大意就是一条船,有N个人需要过河,求N个人最短过河的时间

#include <stdio.h>
int main()
{
int t[],T,j,i,n,sum;
scanf("%d",&T);
for(i=;i<T;i++)
{
scanf("%d",&n);
for(j=;j<n;j++)
scanf("%d",&t[j]);
sum=;
while(n>)
{
if((t[]+t[]+t[n-]+t[n-])>(t[]+t[n-]+t[]+t[])) sum+=*t[]+t[n-]+t[];
else sum+=*t[]+t[n-]+t[n-];
n=n-;
}
if(n==) sum+=t[]+t[]+t[];
if(n==) sum+=t[];
if(n==) sum+=t[];
printf("%d\n",sum);
}
return ;
}

因为最短的只有两种方案,也就是①最短的和次短的过去,然后最短的回来,然后最长的和次长的过去,次短的回来

②最短的和最长的过去,最短的回来,最短的和次长的过去,最短的回来,比较两种方法的时间,选择最好的一种方案

,但这种方案只适合于3人以上的,所以,但人数少于等于3人时,要另外列出,3人时,时间最短也就是最短和最长去,最短回来,然后最短和次短过去

2人时,也就是直接最短和次短过去,1人时,也就只剩下最短了,时间都确定了