POJ1700

//有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 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值