问题描述
有n的人需要过河,但只有一只船,且一次只能载两个人。每个人都有一个渡河的速度,过河的速度取决于速度最慢的那一个,求所有人过完河的最短时间。
输入一个n,表示有n个人。
接着输入n个整数表示每个人过河需要的时间。
例如:
4
1 2 5 10
输出:
17
思路:
有两种可以快速过河的策略,一是由最快的那个人把所有人带过河,二是由最快的和第二快的人先过去,然后最快的那个人再回来,当前最慢的两个人过去,第二快的那个人再回来,如此反复。这两种策略哪种为最优不是确定的,而是跟具体的过河速度有关,因此需要对局部进行判断,求局部最优解保证整体的最优(贪心算法的核心)。
代码实现:
#include<iostream>
#include<algorithm>
using namespace std;
const int M=100;
int a[M];
int fun(int arr[],int n)
{
int