poj-1700

来源:互联网 发布:js遍历数组对象的属性 编辑:程序博客网 时间:2024/06/04 23:35

题目链接

题意简述: 有N个人要过河,只有一艘船最多承载两个人,第i个人过河有时间T_i,两个人一组过河的时间由较长那个人的时间确定,不要忘记算船回来的时间,求过河的最短时间。

题意分析:如果有很多人,考虑最慢的那个人应该如何过河,从河岸A到河岸B(记做A->B): 如果他和某一个人组队过河,那么最佳人选是次慢的那个人(A->B),对于船的返回,最好是让最快的那个人划回去(B->A)。那么思考最快的人是如何到对岸了呢?最佳的选择是和次快的人一起划过去(A->B),对于划回来(B->A),最好是由最快或次快划回去,留下来的那个人(最快或次快)将最慢和次慢的船划回去。但是另外一种情况就是用最快的人将最慢和次满的人分别送过去,这样就将原问题化成了规模为n-2的问题了。两种思路进行比较就是最佳思路。

贪心策略:

n >= 4 :考虑”最快速度的人将最慢和次慢的人送过去”和”最慢和次慢的一起过去,然后最快次快的一起过去,然后最快次快的分别回来“两种的比较。

n==3:速度设为a<=b<=c,a先将c从A送至B,然后a从B->A,最后a和b一起A->B。

n==2:一起过去。

n==1:一个人过去。

原创粉丝点击