題目來自南陽理工oj 過河問題
在漆黑的夜裡,n位旅行者來到了一座狹窄而且沒有護欄的橋邊。如果不借助手電筒的話,大家是無論如何也不敢過橋去的。不幸的是,n個人一共只帶了乙隻手電筒,而橋窄得只夠讓兩個人同時過。如果各自單獨過橋的話,n人所需要的時間已知;而如果兩人同時過橋,所需要的時間就是走得比較慢的那個人單獨行動時所需的時間。問題是,如何設計乙個方案,讓這n人盡快過橋。
輸入 第一行是乙個整數t(1<=t<=20)表示測試資料的組數
每組測試資料的第一行是乙個整數n(1<=n<=1000)表示共有n個人要過河
每組測試資料的第二行是n個整數si,表示此人過河所需要花時間。(0
先將所有人過河所需的時間按照公升序排序,我們考慮把單獨過河所需要時間最多的兩個旅行者送到對岸去,有兩種方式:
1.最快的和次快的過河,然後最快的將船划回來;次慢的和最慢的過河,然後次快的將船划回來,所需時間為:t[0]+2*t[1]+t[n-1];
2.最快的和最慢的過河,然後最快的將船划回來,最快的和次慢的過河,然後最快的將船划回來,所需時間為:2*t[0]+t[n-2]+t[n-1]。
算一下就知道,除此之外的其它情況用的時間一定更多。每次都運送耗時最長的兩人而不影響其它人,問題具有貪心子結構的性質。
#include
#include
#include
#include
#include
using
namespace
std;
int t,n,pep[10001],sum;
int main()
if(n == 3)
if(n == 2)
if(n == 1)
printf("%d\n",sum);
}return
0;}
貪心演算法 小船過河問題
description 一群人划船過河,河邊只有一條船,這條船可以容納兩個人,船過河後需要一人將船開回,以便所有人都可以過河,每個人過河速度不一樣,兩個人過河速度取決於慢的那個人,請問最少需要多久讓所有人過河?input 第一行輸入人數n 第二行輸入每個人過河所需的時間 output 輸出需要的最少...
小船過河問題
小船過河問題 poj1700是一道經典的貪心演算法例題。題目大意是只有一艘船,能乘2人,船的執行 速度為2人中較慢一人的速度,過去後還需乙個人把船划回來,問把n個人運到對岸,最少需要多久。先將所有人過河所需的時間按照公升序排序,我們考慮把單獨過河所需 要時間最多的兩個旅行者送到對岸去,有兩種方式 1...
小船過河(貪心演算法)
只有一艘船,最多能乘2人,船的執行速度為2人中較慢一人的速度,過去後還需乙個人把船划回來,問把n個人運到對岸,最少需要多久。輸入 4 1 2 5 10 輸出 17 1.因為考慮到需要乙個人把船划回來,所以我們可以用速度最快的人把其他人帶到對岸。a b c d ac a ad a 運輸成本 2a c ...