貪心 POJ 1700 過河問題

2021-08-07 07:51:35 字數 1014 閱讀 9360

題意

: 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按公升序排序,那麼 這時將單獨過河所須要時間最多的兩個旅行者送到對岸去...