poj 1700 過河問題 貪心法

2022-04-05 18:20:44 字數 802 閱讀 2697

#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(公升序)

如果用最小的來送:d+a+c+a+b=d+c+b+2a

如果先讓最小的兩個過河,再讓其中乙個回來,

讓最大的兩個過河,再讓前一步過去留下的那個回來,

再讓最小的2個過河

也就是說小的兩個過去2次,再單獨回來一次.

2b+b+a+d=d+3b+a

當d+c+b+2a<=d+3b+a時,也就是c-2b+a<=0時,第一種方法過.

否則用另外一種辦法

4)當人數》4時,a,b,..,c,d(公升序)

過去,回來,過去,回來(船要回來),讓最大的2個過去.

很笨的時間是d+c+c+a=d+2c+a(所有時間都寫出來後會發現時最慢的)

如果讓最小的來送:d+a+c+a=d+c+2a

否則:b+b+a+d=d+2b+a

如果d+c+2a<=d+2b+a,也就是c-2b+a<=0時,第一種方法過

*/int main()

else if(n == 2)

else if(n == 3)

else if(n == 4)

else

}cout<} 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 經典過河問題(貪心)

id 1700 n個人過河。船每次最多僅僅能坐兩個人。船載每乙個人過河的所需時間不同,問最快的過河時間。思路 當n 1,2,3時所須要的最小時間非常easy求得,如今由n 4,如果n個人單獨過河所須要的時間儲存在陣列t中,將陣列t按公升序排序,那麼 這時將單獨過河所須要時間最多的兩個旅行者送到對岸去...