題意:有n個人想要過河,但是船隻有一條,而且每次只能載兩個人,給出n個人過河的時間,兩個人一起過河的話,按照花時最多的計算,求所有人都過河所花的最少時間。
思路:一開始我是想,直接用過河時間最少的那個人每次載乙個到對面,然後再回來載剩下的,仔細想想,這樣不對。然後思考後發現有兩種過河策略:
1、用過河時間最少的那個人每次載乙個到對面,然後再回來載剩下的;
2、用(花時)最少的和次少的迴圈載人,先是最少的和次少的一起過河,再是最少的回來,然後讓最多的載次多的過河,再用次少的回來載人......
然後,我在思考的時候,以為只要第二種就可以是最少的,結果錯了,然後看別人思路,發現他們是分別用這兩種方法過河,取時間最少的,具體看**:
#include#include#include#includeusing namespace std;
int dp[1005];
int main()
if(j==2)
sum+=dp[0]+dp[1]+dp[2];
else if(j==1)
sum+=dp[1];
else
sum+=dp[0];
printf("%d\n",sum);
} return 0;
}
poj1700 黑書第二道貪心例題
題意 有n個人想要過河,但是船隻有一條,而且每次只能載兩個人,給出n個人過河的時間,兩個人一起過河的話,按照花時最多的計算,求所有人都過河所花的最少時間。思路 一開始我是想,直接用過河時間最少的那個人每次載乙個到對面,然後再回來載剩下的,仔細想想,這樣不對。然後思考後發現有兩種過河策略 1 用過河時...
貪心 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按公升序排序,那麼 這時將單獨過河所須要時間最多的兩個旅行者送到對岸去...