參考blog:
上面兩篇blog都給出了該怎麼做,而且非常詳細,但是沒給出為什麼這麼做。
我試著證明了一下,我感覺這個題的策略其實就是把行動最慢的兩個人送過去花費的時間最短。那麼這道題的最終結果將是最優的。
因為送兩個人過河所花費的最小時間已經證明出來了。然後就以每兩個兩個的去送,那麼就形成了遞迴。但是送以兩個人兩個人的去送,這時時間一定是最優的嗎?以三個三個人去送為什麼就不行呢?
不知道對不對希望有大神能指點一下。
#include#includeusing namespace std;
int sum = 0;
int cross_river(int *input,int num)
}int main()
sort(input,input+num);
sum = cross_river(input,num);
printf("%d\n",sum);
}return 0;
}
貪心 POJ 1700 過河問題
題意 n個人過河,船每次只能坐兩個人,船載每個人過河的所需時間不同,過河時間以耗時間長的那個為實際耗時,如何得出最快的過河時間。思路 1 每次最快和那些慢的過去,然後讓最快一直來回,最後全部到對岸。2 還有一種情況,你先讓兩個快的人從a過去至b,然後挑乙個人回來至a,留下乙個快的在b。ok,回來以後...
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 公升序 如果...