poj 1700

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

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

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

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

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

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

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

原文地址:https://www.cnblogs.com/Tree-dream/p/5339523.html