南陽OJ 47 過河問題

2021-08-03 15:18:00 字數 717 閱讀 1791

對於這一類問題,我們首先想到的就是用貪心演算法。

我們可以讓時間最長的兩個人過河,但是怎麼做才能把時間變為最短呢?是用時間最短的人乙個乙個送過去,還是怎麼樣呢?

其實,我們可以考慮兩種方法:1.讓時間最短的人乙個乙個的送過去;2.先要兩個時間最短的過去,然後乙個回來送電燈,然後讓兩個時間最長的人過去,再要對面時間最短的人把電燈送回來,以此類推;

我們要做的就是在這兩種方法中選擇一種過河。

**如下:

#includevoid sort(int *a,int left,int right)

a[i]=t;

sort(a,left,i-1);

sort(a,i+1,right);

}int main()

if(n==3)

sum+=a[0]+a[1]+a[2];

else

if(n==2)

sum+=a[1];

else

sum+=a[0];

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

}return0;

}

南陽 47 過河問題

解題報告 首先按照過河時間從小到大排序,當n 3時候,就是考慮用最小時間先把用時最長的兩個人送過河,且手電筒仍然留在未過河的這邊,剩下的再依次求解。把當前用時最長的兩個人送過河可以考慮兩種方案 方案一 1 號和 2 號先過河,然後 1 號回來,n 號和 n 1 號過河,然後 2 號再回來 用時 2 ...

nyoj 47 過河問題

時間限制 1000 ms 記憶體限制 65535 kb 難度 5 描述 在漆黑的夜裡,n位旅行者來到了一座狹窄而且沒有護欄的橋邊。如果不借助手電筒的話,大家是無論如何也不敢過橋去的。不幸的是,n個人一共只帶了乙隻手電筒,而橋窄得只夠讓兩個人同時過。如果各自單獨過橋的話,n人所需要的時間已知 而如果兩...

過河問題 nyist 47

時間限制 1000 ms 記憶體限制 65535 kb 難度 5 描述 在漆黑的夜裡,n位旅行者來到了一座狹窄而且沒有護欄的橋邊。如果不借助手電筒的話,大家是無論如何也不敢過橋去的。不幸的是,n個人一共只帶了乙隻手電筒,而橋窄得只夠讓兩個人同時過。如果各自單獨過橋的話,n人所需要的時間已知 而如果兩...