快速渡河(貪心演算法)

2021-10-05 03:18:03 字數 765 閱讀 3481

問題描述

有n的人需要過河,但只有乙隻船,且一次只能載兩個人。每個人都有乙個渡河的速度,過河的速度取決於速度最慢的那乙個,求所有人過完河的最短時間。

輸入乙個n,表示有n個人。

接著輸入n個整數表示每個人過河需要的時間。

例如:4

1 2 5 10

輸出:17

思路:

有兩種可以快速過河的策略,一是由最快的那個人把所有人帶過河,二是由最快的和第二快的人先過去,然後最快的那個人再回來,當前最慢的兩個人過去,第二快的那個人再回來,如此反覆。這兩種策略哪種為最優不是確定的,而是跟具體的過河速度有關,因此需要對區域性進行判斷,求區域性最優解保證整體的最優(貪心演算法的核心)。

**實現:

#include

#include

using

namespace std;

const

int m=

100;

int a[m]

;int

fun(

int arr,

int n)

else

if(left==2)

//兩個人

else

if(left==3)

//三個人

else

}return cnt;

}int

main()

經典貪心演算法 貪心演算法概述

貪心演算法具有最優子問題結構,它的特點是 短視 每次選擇對當前局面最有利的決策,來一步步獲得最優解。我個人認為,貪心不是乙個具體的方法,而是一類方法,貪心演算法的關鍵不在於想到,而在於正確性的證明。要證明乙個貪心演算法是正確的,需要證明我們可以把乙個最優解逐步轉化為我們用貪心演算法所得到的解,而解不...

演算法 貪心演算法

把乙個複雜問題分解為一系列較為簡單的區域性最優選擇,每乙個選擇都是對當前解的乙個擴充套件,知道獲得問題的完整解。在解決問題的策略上目光短淺,只根據當前已有的資訊做出選擇,而且一旦做出了選擇,不管將來有什麼結果這個選擇都不會改變。換言之,貪心法並不是從整體最優考慮,它所做出的選擇只是在某種意義上的區域...

演算法 貪心演算法

集合覆蓋問題 旅行商問題等都屬於np完全問題,在數學領域上並沒有快速得到最優解的方案,非常適合用貪婪演算法。判斷方法 1.元素較少時,一般執行速度很快,但隨著元素數量增多,速度會變得非常慢 2.涉及到需要計算比較 所有的組合 情況的通常是np完全問題 3.無法分割成小問題,必須考慮各種可能的情況。這...