NYOJ 47 過河問題

2021-07-11 20:54:36 字數 1084 閱讀 8757

過河問題

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

難度:5

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

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

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

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

題解:n個人過河,當只有乙個人的時候只花費s[1].有兩個人的時候,兩人一起過去(s[2]),三個人的時候,用時最少的那個,先送3,再返回和2一起過去,總的時間是

s[3]+s[2]+s[1].

如果超過三個人的時候有兩種運送方式:

1:最快和次快一起過去,最快的回來,然後最慢和次慢一起過去,讓次快回來,(剩下最快和次快)花費時間(s[2]+s[1]+s[n]+s[2])

2:最快和最慢一起過去,最快的回來,然後最快和次慢一起過去,依次···花費時間(s[n]+s[1]+s[n-1]+s[1])

**:

#include #include #include #include #include using namespace std;

int s[105];

int main()

sort(s+1,s+n+1);///過河時間從小到大排序

int x=n;

int temp=0;

///如果超過三個人

while(x>3)

///如果只剩三個人或者只有三個人

if(x==3)

///如果只剩二個人或者只有二個人

else if(x==2)

///如果只剩乙個人或者只有乙個人

else if(x==1)

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

}return 0;

}

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人所需要的時間已知 而如果兩...