貪心演算法一過河問題

2021-08-31 07:29:31 字數 917 閱讀 8240

一、當人數大於3的時候,分為兩種情況

1.最快的和次快的兩個人過河,最快的人回來,time=a[0]+a[1],這個時候並不是最快的人直接和最慢的人一起過去,而是最快的那個人等待,讓最慢的人和次慢的人先過去,time+=a[n-1],那麼time這一步執行完就要對n進行-2的操作。

time=a[0]+a[1]+a[n-1]+a[1].

2.最快和最慢的兩個人過河,最快的人回來,time=a[0]+a[n-1],然後接走次慢的人。

time=a[0]+a[n-1]+a[0]+a[n-2]。

這裡要注意運算元,最後n-2;

二、當人數等於三的時候,按照上面的兩種方法得到的結果都是time=a[0]+a[1]+a[2],例如:兩個最快的先過去,然後速度最快的人回來,time=a[0]+a[1],也就是說,兩個人過河,過去的時候是最慢的人的速度,回來的時候就應該是最快的人的速度。

三、當人數等於二的時候,直接就是兩個人過去,時間就是最慢的人的時間。

四、當人數等於一的時候,那麼所用的時間就是這個人的時間。

#include#include#include#includeusing namespace std;

struct xiao

x[1100];

bool cmp(xiao a,xiao b)

if(a==2) num+=x[1].time;

else if(a==3) num+=x[0].time+x[1].time+x[2].time;

else if(a==1) num+=x[0].time;

printf("%d\n",num);

}return 0;

}

貪心演算法 小船過河問題

description 一群人划船過河,河邊只有一條船,這條船可以容納兩個人,船過河後需要一人將船開回,以便所有人都可以過河,每個人過河速度不一樣,兩個人過河速度取決於慢的那個人,請問最少需要多久讓所有人過河?input 第一行輸入人數n 第二行輸入每個人過河所需的時間 output 輸出需要的最少...

小船過河(貪心演算法)

只有一艘船,最多能乘2人,船的執行速度為2人中較慢一人的速度,過去後還需乙個人把船划回來,問把n個人運到對岸,最少需要多久。輸入 4 1 2 5 10 輸出 17 1.因為考慮到需要乙個人把船划回來,所以我們可以用速度最快的人把其他人帶到對岸。a b c d ac a ad a 運輸成本 2a c ...

nyoj47 過河問題(貪心演算法) 演算法筆記

題目描述 在漆黑的夜裡,n位旅行者來到了一座狹窄而且沒有護欄的橋邊。如果不借助手電筒的話,大家是無論如何也不敢過橋去的。不幸的是,n個人一共只帶了乙隻手電筒,而橋窄得只夠讓兩個人同時過。如果各自單獨過橋的話,n人所需要的時間已知 而如果兩人同時過橋,所需要的時間就是走得比較慢的那個人單獨行動時所需的...