nyoj47過河問題(貪心)

2021-06-27 09:09:44 字數 1034 閱讀 1118

時間限制:

1000 ms  |  記憶體限制:

65535 kb

難度:5 描述

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

輸入

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

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

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

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

樣例輸入

1

41 2 5 10

樣例輸出

17
這道題還是不好想的。
首先,線排序,如果人數小於2,那麼直接輸出a[n],(因為如果有乙個人,輸出a[1],如果有兩個人,那麼讓兩個人一起過河,輸出a[2]).
有3個人是,結果是a[1]+a[2]+a[3];
當人數大於3是,有兩種方案:
一,如資料時1,2,5,10這種,那麼先讓a[1],a[2]過河,讓a[1]回來,再讓a[3],a[4]過河,然後讓a[2]回來,最後讓a[1]和a[2]一起過河,
所用時間是a[1]+a[n]+2*a[2];
二,如資料1,10,10,10這種情況,那麼每一次都讓a[1]回來,所用時間是a[n]+a[n-1]+2*a[1]。
最後比較這兩種方案所用時間的最小值。
#include#include#include#include#define maxn 1001

using namespace std;

int a[maxn];

int min(int a,int b)

{ return a

NYOJ47 過河問題(貪心)

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

NYOJ 47 過河問題 (貪心)

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

NYOJ 47 過河問題 貪心

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