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\n",sum); } return 0; }
因为最短的只有两种方案,也就是①最短的和次短的过去,然后最短的回来,然后最长的和次长的过去,次短的回来
②最短的和最长的过去,最短的回来,最短的和次长的过去,最短的回来,比较两种方法的时间,选择最好的一种方案
,但这种方案只适合于3人以上的,所以,但人数少于等于3人时,要另外列出,3人时,时间最短也就是最短和最长去,最短回来,然后最短和次短过去
2人时,也就是直接最短和次短过去,1人时,也就只剩下最短了,时间都确定了
时间: 2024-11-02 00:28:09