nyoj 47 過河問題 貪心

2021-07-22 18:04:57 字數 1533 閱讀 8279

時間限制:1000 ms  |  記憶體限制:65535 kb

難度:5

描述

在漆黑的夜裡,n位旅行者來到了一座狹窄而且沒有護欄的橋邊。如果不借助手電筒的話,大家是無論如何也不敢過橋去的。

不幸的是,n個人一共只帶了乙隻手電筒,而橋窄得只夠讓兩個人同時過。如果各自單獨過橋的話,n人所需要的時間已知;

而如果兩人同時過橋,所需要的時間就是走得比較慢的那個人單獨行動時所需的時間。問題是,如何設計乙個方案,讓這n人盡快過橋。

輸入

第一行是乙個整數t(1<=t<=20)表示測試資料的組數

每組測試資料的第一行是乙個整數n(1<=n<=1000)表示共有n個人要過河

每組測試資料的第二行是n個整數si,表示此人過河所需要花時間。(1<=si<=100)

輸出

輸出所有人都過河需要用的最少時間
樣例輸入

1

41 2 5 10

樣例輸出

17
**

poj

上傳者

張云聰

題意:一群人通過橋的耗時不同,手電只有乙個,只能來回傳手電,每次限過最多兩人,每次耗時為時間長的(小的耗時被覆蓋).求最小耗時.

輸入後按照耗時從小到大排序.

n = 1,直接過,time = a[0];

n = 2,直接過,time = max(a[0],a[1]);

n = 3,最小耗時 和 最大耗時一起過,然後最小耗時回來,兩人一起過,time = a[0]+a[1]+a[2];

n >=4,兩種過橋辦法:

1> 耗時最小和最大耗時過去,最小耗時回來,然後剩下的人中耗時最大和耗時最小一起過,time = a[0]*2+a[n-1]+a[n-2];

2> 耗時排在前面的兩個人過去,然後耗時最小的回來,耗時最大的兩個人過去,耗時第二小的回來.time = a[0]+a[1]+a[n-1];

兩者比較,用耗時比較小的.然後兩人兩人過,到最後剩下不足四人,按照上邊n<4的情況處理.

#include

using namespace std;

int a[1005];

int main()

if(n==3)

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

else

if(n==2)

time+=a[1];

else

time+=a[0];

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

}return

0;}

NYOJ47 過河問題(貪心)

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

NYOJ 47 過河問題 (貪心)

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

nyoj47過河問題(貪心)

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