ACM 過河問題

2022-05-27 23:27:08 字數 1284 閱讀 1835

時間限制:1000 ms  |  記憶體限制:65535 kb

難度:5

描述在漆黑的夜裡,n位旅行者來到了一座狹窄而且沒有護欄的橋邊。如果不借助手電筒的話,大家是無論如何也不敢過橋去的。不幸的是,n個人一共只帶了乙隻手電筒,而橋窄得只夠讓兩個人同時過。如果各自單獨過橋的話,n人所需要的時間已知;而如果兩人同時過橋,所需要的時間就是走得比較慢的那個人單獨行動時所需的時間。問題是,如何設計乙個方案,讓這n人盡快過橋。 

輸入第一行是乙個整數t(1<=t<=20)表示測試資料的組數

每組測試資料的第一行是乙個整數n(1<=n<=1000)表示共有n個人要過河

每組測試資料的第二行是n個整數si,表示此人過河所需要花時間。(0輸出

輸出所有人都過河需要用的最少時間

樣例輸入

1

41 2 5 10

樣例輸出

17

此題是阿里的一道筆試題,主要用貪心演算法求解

分成兩種情況(假設時間已經排序)

(1)最小時間把次最大和最大的時間送過去,花費的時間為2s[0]+s[n-2]+s[n-1]

如 1 7 8 9,則為1把9送過去,1回來,1再把8送過去,1在回來,則能把8,9送過去,時間為19

像 1 2 4 5,則為1把5送過去,1回來,1再把4送過去,1在回來,則能把4,5送過去,時間為11

(2)最小和次小把最大和次大一起送過去,話費時間為s[0]+2s[1]+s[n-1]

如 1 7 8 9,則為1,7送過去,1回來,8,9送過去,7回來,則能把8,9送過去,時間為24

像 1 2 4 5,則為1,2送過去,1回來,4,5送過去,2回來,則能把4,5送過去,時間為10

故兩種方法中選取最優的

#include #include 

#include

using

namespace

std;

intmain()

}if(n <= 2

)else

if(n == 3

) cout

}}

過河問題(ACM

描述 在漆黑的夜裡,n 位旅行者來到了一座狹窄而且沒有護欄的橋邊。如果不借助手電筒的話,大家是無論如何也不敢過橋去的。不幸的是,n個人一共只帶了乙隻手電筒,而橋窄得只夠讓兩個人同時過。如果各自單獨過橋的話,n人所需要的時間已知 而如果兩人同時過橋,所需要的時間就是走得比較慢的那個人單獨行動時所需的時...

青蛙過河問題

青蛙過河是乙個非常有趣的智力遊戲,其大意如下 一條河之間有若干個石塊間隔,有兩隊青蛙在過河,每隊有3 只青蛙,如 圖 10 19所示。這些 青蛙只能向前移動,不能向後移動,且一次只能有乙隻青蛙向前移動。在移動過程中,育蛙可以向 前面的空位中移動,不可一次跳過兩個位置,但是可以跳過對方乙隻青蛙進入前面...

貪心過河問題

過河問題 時間限制 1000 ms 記憶體限制 65535 kb 難度 5 描述在漆黑的夜裡,n位旅行者來到了一座狹窄而且沒有護欄的橋邊。如果不借助手電筒的話,大家是無論如何也不敢過橋去的。不幸的是,n個人一共只帶了乙隻手電筒,而橋窄得只夠讓兩個人同時過。如果各自單獨過橋的話,n人所需要的時間已知 ...