問題描述
poj 1700
在乙個漆黑的夜裡,n為旅行者來到狹窄而沒有護欄的橋邊。如果不借助手電筒的話,大家是無論如何也不敢過橋去的。不幸的是,n個人一共只帶了乙隻手電筒,而橋窄得只夠讓兩個人同時過。如果各自單獨過橋的話,n人所需要的時間已知;而如果兩人同時過橋,所需要的時間就是走得比較慢的那個人單獨行動時所需的時間。問題是,如何設計乙個方案,讓這n人盡快過橋。
解題思路
很容易想到使用貪心策略,但具體怎麼做呢?
假設共5個人t1、t2、t3、t4、t5,時間一次增加,如何用最少的時間使得5人都過河?
考慮先將t4和t5過河(最慢的兩個安排好了,無後效性),經過簡單比較,有兩種較優方法。
然後問題簡化為只有3個人t1、t2、t3,n≤3的情況直接觀察。
推廣到n個人(n ≥ 4),只需取(t1 + 2*t2 + tn)和(2*t1 + tn-1 + tn)中的較小者,問題化為前n-2個人的情況。
**實現
1 #include2 #include3 #include4using
namespace
std;56
const
int maxn = 1000 + 10;7
intn,times[maxn];89
intmain()
1024
if (n == 3) sum += (times[0] + times[1] + times[2
]);25
if (n == 2) sum += times[1
];26
if (n == 1) sum += times[0
];27
28 printf("
%d\n
", sum);29}
30return0;
31 }
過河問題(ACM
描述 在漆黑的夜裡,n 位旅行者來到了一座狹窄而且沒有護欄的橋邊。如果不借助手電筒的話,大家是無論如何也不敢過橋去的。不幸的是,n個人一共只帶了乙隻手電筒,而橋窄得只夠讓兩個人同時過。如果各自單獨過橋的話,n人所需要的時間已知 而如果兩人同時過橋,所需要的時間就是走得比較慢的那個人單獨行動時所需的時...
青蛙過河問題
青蛙過河是乙個非常有趣的智力遊戲,其大意如下 一條河之間有若干個石塊間隔,有兩隊青蛙在過河,每隊有3 只青蛙,如 圖 10 19所示。這些 青蛙只能向前移動,不能向後移動,且一次只能有乙隻青蛙向前移動。在移動過程中,育蛙可以向 前面的空位中移動,不可一次跳過兩個位置,但是可以跳過對方乙隻青蛙進入前面...
貪心過河問題
過河問題 時間限制 1000 ms 記憶體限制 65535 kb 難度 5 描述在漆黑的夜裡,n位旅行者來到了一座狹窄而且沒有護欄的橋邊。如果不借助手電筒的話,大家是無論如何也不敢過橋去的。不幸的是,n個人一共只帶了乙隻手電筒,而橋窄得只夠讓兩個人同時過。如果各自單獨過橋的話,n人所需要的時間已知 ...