8 8 兩人過橋bridge 2529

2021-08-05 21:40:15 字數 2559 閱讀 2468

有n個人希望在晚上通過一座橋。在任何時刻,最多只能有兩個人在橋上,並且必須要帶著手電筒才能通過橋。現在的麻煩是只有乙個手電筒,所以必須安排某種順序,使得手電筒可以被帶回去讓更多的人過橋(手電筒必須由人帶回,不可以從對岸扔過去)。 每個人都有不同的過橋時間,兩個人一起過橋所用的時間等於其中較慢的乙個。你的任務是要找出能在最短時間內使所有人都過橋的方案。

40%的資料滿足:n<=100;

100%的資料滿足:n<=1000

樣例讀入       樣例輸出

4 17

1 2

5 10

可以先讓1和2過橋,然後1回來,讓5和10過橋,然後2再回來帶1一起過橋,時間為:2+1+10+2+2=17。

貪心,先排序

有兩種策略,每次取效率最高的:

1.讓最快的人來回帶

2.先讓最快和次快的人過去,然後最快回來,最慢和次慢過去,次快單獨回來,帶最快過去

從小到大做和從大到小做都可以,從小到大要保持手電筒、最快和次快在右邊,從大到小則保持手電筒、最快和次快在左邊

時間複雜度o(n)

|     |

左邊 | | 右邊

(起點) | | (終點)

| |

從大到小

var

n,i,ans:longint;

a:array[1..1000]of longint;

procedure

qsort

(l,r:longint);

var i,j,key,t:longint;

begin

if l>=r then

exit;

i:=l;j:=r;

key:=a[(l+r) div

2]; repeat

while a[i]do inc(i);

while a[j]>key do dec(j);

if i<=j then

begin

t:=a[i];a[i]:=a[j];a[j]:=t;

inc(i);dec(j);

end;

until i>j;

qsort(i,r);

qsort(l,j);

end;

function

min(a,b:longint):longint;

begin

if athen

exit(a) else

exit(b);

end;

begin

readln(n);

for i:=1

to n do

readln(a[i]);

qsort(1,n);

while n>3

dobegin

ans:=ans+min(a[1]*2+a[n]+a[n-1],a[n]+a[2]*2+a[1]);

n:=n-2;

end;

if n=3

then ans:=ans+a[1]+a[2]+a[3]

else ans:=ans+a[n];

writeln(ans);

end.

從小到大

var

n,i:longint;

a,f:array[1..1000]of longint;

procedure

qsort

(l,r:longint);

var i,j,key,t:longint;

begin

if l>=r then

exit;

i:=l;j:=r;

key:=a[(l+r) div

2]; repeat

while a[i]do inc(i);

while a[j]>key do dec(j);

if i<=j then

begin

t:=a[i];a[i]:=a[j];a[j]:=t;

inc(i);dec(j);

end;

until i>j;

qsort(i,r);

qsort(l,j);

end;

function

min(a,b:longint):longint;

begin

if athen

exit(a) else

exit(b);

end;

begin

readln(n);

for i:=1

to n do

readln(a[i]);

qsort(1,n);

f[1]:=a[1];f[2]:=a[2];

for i:=3

to n do

f[i]:=min(f[i-1]+a[i]+a[1],f[i-2]+a[i]+a[1]+a[2]*2);

writeln(f[n]);

end.

益智 兩人過橋問題

有a b c d四個人,要在夜裡過一座橋。他們通過這座橋分別需要耗時1 2 5 10分鐘,只有一支手電,並且同時最多只能兩個人一起過橋。請問,如何安排,能夠在17分鐘內這四個人都過橋?題目解析 四個人a 1分鐘 b 2分鐘 c 5分鐘 d 10分鐘 本題最大的坑點是利用人的常理化思維 一般會讓花費時...

兩人結對作業

1.題目簡介 設計一款掃雷遊戲,要求要有基本的踩雷死亡 周圍雷的數目提示 周圍無雷區自動掃除等功能。2.結對分工及設計 結對分工 劉旭負責介面的開發,王建斌負責遊戲邏輯的開發。設計 本遊戲精妙之處在於自動掃除無雷區的功能,用的是廣度優先的演算法。3.位址 4.測試情況 1.測試遊戲介面是否正常。測試...

兩人合作經過此

專案 貪心演算法的應用 馬踏棋盤 define n 8 voiddfs intx,inty,intcount for i 0 i 8 i 現代軟體產業經過幾十年的發展,乙個軟體由乙個人單槍匹馬完成已經很少見了,軟體都是在相互合作中完成的。合作的最小單位是兩個人,兩個工程師在一起,做得最多的事就是看 ...