過河問題(二)

2022-05-02 11:21:08 字數 976 閱讀 4536

問題描述

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 #include4

using

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