NYOJ 47過河問題

2022-05-24 10:09:11 字數 902 閱讀 4676

主要思路:先排序。有兩種可能是最小的情況,一種是讓最小的去帶著最大的過去,然後最小的再回來,還有一種就是先最小的和第二小的一塊過去, 然後最小的回來,讓最大的和第二大的過去,接著第二小的回來,第二小和最小的接著在過去,最小的接著回來,主要就是這兩種,用的時候判斷一下,接著的問題就是n是奇數還是偶數的問題

排完序之後的a[0]最小, a[n-1]最大,第一種的時間為a[0] + a[n -1] + a[0] + a[n - 2];其中a[0]是最短的時間,a[n-1]是最大的時間,下面一樣, 第二種的時間為a[n -1] + a[1] + a[1] + a[0];其中a[1]是第二小的時間。最後要判斷是奇偶數,具體**如下,**上有注釋:

1 #include 2 #include 3

4int

main()516

for(i = 0; i < n - 1; i ++)//

選擇排序

1726

if(n <= 2)//

如果n為1或者為2 的時候,只需要進行一次過橋,時間為最後乙個人的

2731 sum = a[1

];32

while(n > 3)//

當n > 3的時候過橋時間有個規律,最短一共兩種,一種是最短時間的那個人帶著最長的那個過,然後自己再回來,還有就是先最長的兩個過去,第二短的回來,第一第二短在過去,第一短再回來

3340

if(n == 3)//

這裡判斷有兩個用途,乙個實判斷是否是奇數,就是最後還剩三個,還有就是剛開始是奇數的時候

41 sum += a[2] + a[0

];42 printf("

%d\n

", sum);43}

44return0;

45 }

nyoj 47 過河問題

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

NYOJ 47 過河問題

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

nyoj 47 過河問題

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