当前位置:首页 > 贪心 > 正文
洛谷P1809过河问题[NOI导刊]
1618+

题目大意:n个人过河,只有一条船,每次只能两个人坐船过去,耗时为最重的人的重量,n个人全部过河,至少耗时多少?

题目描述

有一个大晴天,Oliver与同学们一共N人出游,他们走到一条河的东岸边,想要过河到西岸。而东岸边有一条小船。

船太小了,一次只能乘坐两人。每个人都有一个渡河时间T,船划到对岸的时间等于船上渡河时间较长的人所用时间。

现在已知N个人的渡河时间T,Oliver想要你告诉他,他们最少要花费多少时间,才能使所有人都过河。

注意,只有船在东岸(西岸)的人才能坐上船划到对岸。

输入输出格式

输入格式

输入文件第一行为人数N,以下有N行,每行一个数。

第i+1行的数为第i个人的渡河时间。

输出格式

输出文件仅包含一个数,表示所有人都渡过河的最少渡河时间

输入输出样例

输入样例 #1

4 
6 
7 
10 
15 

输出样例 #1

42

说明

[数据范围]

对于40%的数据满足N≤8。

对于100%的数据满足N≤100000。

[样例解释]

初始:东岸{1,2,3,4},西岸{}

第一次:东岸{3,4},西岸{1,2} 时间7 第二次:东岸{1,3,4},西岸{2} 时间6 第三次:东岸{1},西岸{2,3,4},时间15 第四次:东岸{1,2},西岸{3,4} 时间7 第五次:东岸{},西岸{1,2,3,4} 时间7

所以总时间为7+6+15+7+7=42,没有比这个更优的方案。

解题思路

考虑最重的人和谁过去,要么和最轻的,这样最轻的人可以把船撑回来;要么和次重的,这样可以多带更多“东西”过去。显然,如果对面有更轻的人,最重的肯定和次重的过去,否则要看哪种情况更有利。

我们考虑送最重和次重过去:

方法一:1和2过去,1回来,n和n-1过去,2回来,耗时a[1]+a[2]+a[2]+a[n]

方法二:1和n过去,1回来,1和n-1过去,1回来,耗时a[1]+a[1]+a[n-1]+a[n]

a[2]+a[2] < a[1]+a[n-1]时,先送两个小的过去,否则用最轻的送最重的过去。

程序实现

倒搜,n个人过河,c表示对面是否有第二轻的人(之前是否有两个最小的过河)。如果有,显然最重的两人过河,否则两种情况都试一下。

About

坚决不Copy代码!

本文标签:,,,,,,

洛谷P1809过河问题[NOI导刊]:等您坐沙发呢!

发表评论

您必须 [ 登录 ] 才能发表留言!