時間限制: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人過河最少要多少時間。分析 參考網上的思路 題意 也就是乙個坐船問題,一共有兩個策略 最快和次快過去,最快回...