題意
: n個人過河, 船每次只能坐兩個人,
船載每個人過河的所需時間不同,過河時間以耗時間長的那個為實際耗時, 如何得出最快的過河時間。
思路:
1 每次最快和那些慢的過去,然後讓最快一直來回,最後全部到對岸。
2 還有一種情況,你先讓兩個快的人從a過去至b,然後挑乙個人回來至a,留下乙個快的在b。ok,回來以後我讓兩個最慢的過去至b,然後讓b那邊的快的過來接a這邊的快的。這樣或許會省時一點。
我們假設只有四個人,tf(the fast最快),sf(second fast次快),ss(second slower次慢),ts(the slower最慢)。o
第一種情況:
tf兜來兜去的case:
tf+ts–>
<–tf
tf+ss–>
<–tf
tf+sf–>
第二種情況:
tf+sf–>
<–sf
ts+ss–>
<–tf
tf+sf–>
然後各類的時間消掉,會得出兩種方案的最終比較:2*sf和tf+ss的比較;
**如下:
#includevoid quicksort(int left,int right,int a[1005])
else
totle+=2*time[2]+time[i]+time[1];
}if(i==3)
totle+=time[3]+time[1]+time[2];
else if(i==2)
totle+=time[2];
printf("%d\n",totle);}}
return 0;
}
體會:遇到這種因素會變的題目(人數),應當一種一種情況分開討論,有相同規律的用相同的手法解答,把大問題放小了看,只看眼前,貪心一點,例如當多於5個人時,我就只看4個人。
POJ 1700 經典過河問題(貪心)
id 1700 n個人過河。船每次最多僅僅能坐兩個人。船載每乙個人過河的所需時間不同,問最快的過河時間。思路 當n 1,2,3時所須要的最小時間非常easy求得,如今由n 4,如果n個人單獨過河所須要的時間儲存在陣列t中,將陣列t按公升序排序,那麼 這時將單獨過河所須要時間最多的兩個旅行者送到對岸去...
poj 1700 過河問題 貪心法
include include using namespace std 貪婪法 1 當人數 3時 直接過 2 當人數 3時 假設為a,b,c.公升序 如果用最小的來送 c a b c b a 如果大的一起過 c b b c 2b.所以這個時候用小的來送.3 當人數 4時,a,b,c,d 公升序 如果...
POJ 1700 經典過河問題(貪心)
id 1700 n個人過河。船每次最多僅僅能坐兩個人。船載每乙個人過河的所需時間不同,問最快的過河時間。思路 當n 1,2,3時所須要的最小時間非常easy求得,如今由n 4,如果n個人單獨過河所須要的時間儲存在陣列t中,將陣列t按公升序排序,那麼 這時將單獨過河所須要時間最多的兩個旅行者送到對岸去...