//有n个人过河,n个人有n个时间,只有一条船,
//每次船只能载两个人过河,过河的时间由船上的两个人中速度慢的决定
//比如 过河时间为2的人和过河时间为5的人一起过河,他们过河用的时间是5
//求n个人过河最少用多久
//1,2,5,10
// 1,2 过去用2s;
// 1回来用1s;
//5,10 过去用10s
// 2回来用2s
//1,2过去用2s
// sum = 2+1+10+2+2
#include<stdio.h>
#include<algorithm>
using namespace std;
int main()
{
int t,a[1100],n,sum;
scanf("%d",&t);
while(t--)
{
sum = 0;
scanf("%d",&n);
for(int i = 0; i < n; i++)scanf("%d",&a[i]);
while(n > 3)
{
sum = min(sum+a[1]+a[0]+a[n-1]+a[1],sum+a[n-1]+a[0]+a[n-2]+a[0]);
n -= 2;
}
if(n == 3) sum += a[0] + a[1] + a[2];
else if(n == 2) sum += a[1];
else sum += a[0];
printf("%d\n",sum);
}
}
//找出用时最长的两个人回来要用的最短时间;
//第一种方法 a[0]送a[n-1]过去;
// a[0]回来 ;
// a[0]送a[n-2]过去;
// a[0]回来;
//第二种方法 a[0]和a[1]过去;
// a[0]回来;
// a[n-1]和a[n-2]过去;
// a[1]回来
//在两种方法中找出耗时短的一种后,再让 n-2;
// 循环以上过程直到n<=3,利用下面三个if语句最终得出sum
POJ1700
最新推荐文章于 2024-06-30 21:45:29 发布