南陽 47 過河問題

2021-06-20 05:15:10 字數 738 閱讀 1759

解題報告:

首先按照過河時間從小到大排序,當n>3時候,就是考慮用最小時間先把用時最長的兩個人送過河,

且手電筒仍然留在未過河的這邊,剩下的再依次求解。

把當前用時最長的兩個人送過河可以考慮兩種方案:

方案一:

1 號和 2 號先過河,然後 1 號回來,n 號和 n-1 號過河,然後 2 號再回來

用時:2*a[2]+a[1]+a[n];

方案二:

1 號和 n 號先過河,然後 1 號再回來,1 號和 n-1 號再過河,之後 1 號再回來

用時:a[n]+a[n-1]+2*a[1];

所以每次把用時最長的兩個人送過河用時應該取上述兩種方案中的最小值。至於為什麼要先考慮

把用時最長的兩個人送個和用的是貪心的思想,因為只有兩個用時最長的兩個人一塊過河才能保證

用時次長的人不會占用過河時間,將時間降到最低(我是這樣考慮的,不知道對不對。。)

#include#include#includeint cmp(const void *a,const void *b)

int min(int a,int b)

if(m==3) s+=a[0]+a[1]+a[2];

else if(m==2) s+=a[1];

else s+=a[0];

printf("%d\n",s);

}return 0;

}

南陽OJ 47 過河問題

對於這一類問題,我們首先想到的就是用貪心演算法。我們可以讓時間最長的兩個人過河,但是怎麼做才能把時間變為最短呢?是用時間最短的人乙個乙個送過去,還是怎麼樣呢?其實,我們可以考慮兩種方法 1.讓時間最短的人乙個乙個的送過去 2.先要兩個時間最短的過去,然後乙個回來送電燈,然後讓兩個時間最長的人過去,再...

nyoj 47 過河問題

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

過河問題 nyist 47

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