時間限制: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人所需要的時間已知 ...