思路:
(一)、當只有乙個人時,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人所需要的時間已知 而如果兩...