POJ1700

来源:互联网 发布:不吃肉 知乎 编辑:程序博客网 时间:2024/05/20 22:40
//有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 
原创粉丝点击