過河問題 貪心

2022-07-29 04:21:10 字數 1567 閱讀 3861

時間限制: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
#include#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

using

namespace

std;

typedef

long

long

ll;typedef unsigned

long

long

ull;

#define maxn 1005

#define inf 1000000009

/*過橋問題

單獨過橋時間已知,兩人同時過橋 時間為較慢的那人的時間

只有乙個手電筒

1 2 5 10

一開始的思路是讓跑的最快的人來回送手電 ,但是最優解是兩個最慢的同時過河

t1 t2 t3 t4

1來回送

t2+t1+t3+t1+t4 2*t1+t2+t3+t4

兩個慢的同時過

t1+t2+t4+t2+t2 3*t2+t1+t4

結論:如果(t1+t3)大於2t2,第二種方法優;如果(t1+t3)小於2t2,第一種方法優;如果(t1+t3)等於2t2,兩種方法無差異。

當 n< 4

t1 t2 t3

t1+t2+t3

t1 t2

t2*/

intt, n, ans, time[maxn];

intmain()

if (n == 1) ans += time[0

];

else

if (n == 2) ans += time[1

];

else ans += time[0]+time[1]+time[2

]; printf(

"%d\n

", ans);

}return0;

}

貪心過河問題

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

貪心 過河問題

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

貪心 過河問題

題目意思 每個人過河都有自己的過河時間,有n個人想過河,但只有乙隻小船,最多只能裝2個人,每一次過河,過河時間為用時最多的那人過河時間,如果還有人沒有過河,那麼過去乙個用時最少 的送回船。問n人過河最少要多少時間。分析 參考網上的思路 題意 也就是乙個坐船問題,一共有兩個策略 最快和次快過去,最快回...