1232:Crossing River

 

【題目描述】

幾個人過河,每次過兩人一人回,速度由慢者決定,問過河所需最短時間。

【輸入】

輸入t組數據,每組數據第1行輸入n,第2行輸入n個數,表示每個人過河的時間。

【輸出】

輸出t行數據,每行1個數,表示每組過河最少時間。

【輸入樣例】

1
4
1 2 5 10

【輸出樣例】

17
// Created on 2020/2/13

/*#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <algorithm>
#include <climits>*/
#include <bits/stdc++.h>

using namespace std;

typedef long long ll;
const int idata=100000+5;
int n,m;
int tim[idata];
int len;
bool judge;
int flag;
int minn=INT_MAX;
int sum;

int main()
{
    int i,j;
    int t;
    cin>>t;
    while(t--)
    {
        minn=INT_MAX;
        sum=0;
        cin>>n;
        for(i=1;i<=n;i++)
        {
            cin>>tim[i];
        }

        sort(tim+1,tim+1+n);

        for(i=n;i>3;i-=2)
        {
            if(tim[i]+tim[i-1]+tim[1]+tim[1]>
               tim[i]+tim[2]+tim[2]+tim[1])
            {
                sum+=tim[i]+tim[2]+tim[2]+tim[1];
            }
            else
                sum+=tim[i]+tim[i-1]+tim[1]+tim[1];
        }
        if(i==3)
            sum+=tim[1]+tim[2]+tim[3];
        if(i==2)
            sum+=tim[2];
        if(i==1)
            sum+=tim[1];//相當於sum=tim[1],因爲只有當1個人過河時纔會出現這種情況

        cout<<sum<<endl;
    }
    return 0;
}

 

 附一篇過橋過河問題解析:

https://www.jianshu.com/p/84608db757b4

發佈了221 篇原創文章 · 獲贊 10 · 訪問量 9502
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章