貪心 nyoj 過河問題

2021-06-27 00:51:03 字數 1299 閱讀 3674

思路:

(一)、當只有乙個人時,t=此人過河所需要花的時間;

(二)、當有兩個人時,t=走得比較慢的那個人單獨行動時所需的時間;

(三)、當有三個人時,最快的和最慢的先過(t3),最快的回來(t1),最快的和中間那個一起走(t2),所以總時間為t=t1+t2+t3;

(四)、當有四個人時,分兩種情況:(四個人的時間已從小到大排列,abcd分別表示第一,二,三,四個人)

1)a和d一起過橋(t4),a回來(t1),a和c一起過橋(t3),a回來(t1),a和b一起過橋(t2),所以總時間t=t4+2*t1+t3+t2

2)a和b一起過橋(t2),a回來(t1),c和d一起過橋(t4),b回來(t2),a和b一起過橋(t2),所以總時間t=3*t2+t1+t4

選擇其中用時較小的方案。

(五)、當大於四個人時,先判斷ab和最後兩個人的情況,此時將其轉化成第(四)種情況,

注:(1)t=t4+2*t1+t3

(2)t=2*t2+t1+t4

(m-=2)此時將最後兩個人送過橋

#include#include#includeusing namespace std;

int main()

{ int n,i,m,s[1005],sum,x,y;

scanf("%d",&n);

while(n--)

{scanf("%d",&m);

for(i=1; i<=m; i++)

scanf("%d",&s[i]);

sort(s+1,s+m+1);

i=m;

sum=0;

for(;;)

{if(i<=4)

{if(i==1)

sum+=s[1];

else if(i==2)

sum+=s[2];

else if(i==3)

sum+=s[3]+s[1]+s[2];

else if(i==4)

{x=2*s[1]+s[2]+s[i]+s[i-1];

y=s[1]+3*s[2]+s[i];

sum+=x

NYOJ47 過河問題(貪心)

題目描述 在漆黑的夜裡,n位旅行者來到了一座狹窄而且沒有護欄的橋邊。如果不借助手電筒的話,大家是無論如何也不敢過橋去的。不幸的是,n個人一共只帶了乙隻手電筒,而橋窄得只夠讓兩個人同時過。如果各自單獨過橋的話,n人所需要的時間已知 而如果兩人同時過橋,所需要的時間就是走得比較慢的那個人單獨行動時所需的...

NYOJ 47 過河問題 (貪心)

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

NYOJ 題目47 過河問題 (貪心)

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