zoukankan      html  css  js  c++  java
  • 过河问题 贪心

    过河问题

    时间限制:1000 ms  |  内存限制:65535 KB
    难度:5
     
    描述

    在漆黑的夜里,N位旅行者来到了一座狭窄而且没有护栏的桥边。如果不借助手电筒的话,大家是无论如何也不敢过桥去的。不幸的是,N个人一共只带了一只手电筒,而桥窄得只够让两个人同时过。如果各自单独过桥的话,N人所需要的时间已知;而如果两人同时过桥,所需要的时间就是走得比较慢的那个人单独行动时所需的时间。问题是,如何设计一个方案,让这N人尽快过桥。 

     
    输入
    第一行是一个整数T(1<=T<=20)表示测试数据的组数
    每组测试数据的第一行是一个整数N(1<=N<=1000)表示共有N个人要过河
    每组测试数据的第二行是N个整数Si,表示此人过河所需要花时间。(0<Si<=100)
    输出
    输出所有人都过河需要用的最少时间
    样例输入
    1
    4
    1 2 5 10
    样例输出
    17
    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<sstream>
    #include<algorithm>
    #include<queue>
    #include<vector>
    #include<cmath>
    #include<map>
    #include<stack>
    #include<set>
    #include<fstream>
    #include<memory>
    #include<list>
    #include<string>
    using namespace std;
    typedef long long LL;
    typedef unsigned long long ULL;
    #define MAXN  1005
    #define INF 1000000009
    /*
    过桥问题
        单独过桥时间已知,两人同时过桥 时间为较慢的那人的时间
        只有一个手电筒
        1 2 5 10
    一开始的思路是让跑的最快的人来回送手电 ,但是最优解是两个最慢的同时过河
        T1 T2 T3 T4
        1来回送
        T2+T1+T3+T1+T4 2*T1+T2+T3+T4
        两个慢的同时过
        T1+T2+T4+T2+T2 3*T2+T1+T4
    结论:如果(T1+T3)大于2T2,第二种方法优;如果(T1+T3)小于2T2,第一种方法优;如果(T1+T3)等于2T2,两种方法无差异。
    当 n< 4
    T1 T2 T3
    T1+T2+T3
    T1 T2 
    T2
    */
    int T, n, ans, Time[MAXN];
    int main()
    {
        scanf("%d", &T);
        while (T--)
        {
            scanf("%d", &n);
            for (int i = 0; i < n; i++)
                scanf("%d", &Time[i]);
            sort(Time, Time + n);
            ans = 0;
            while(n >= 4)//time[n-4] n-3 n-2 n-1 
            {
                ans += min(Time[n - 1] + Time[n - 2] + 2 * Time[0], Time[0] + Time[1] + Time[n - 1] + Time[1]);
                n -= 2;
            }
            if (n == 1) ans += Time[0];
            else if (n == 2) ans += Time[1];
            else ans += Time[0]+Time[1]+Time[2];
            printf("%d
    ", ans);
        }
        return 0;
    }
  • 相关阅读:
    关于STM32的bxcan模块中的Error management中的TEC和REC的值
    不同MCU的大小端(endian)分类
    vmware中虚拟机的网络连接设置
    ST的STM32系列单片机
    使用diskgenius进行分区的备份和恢复
    VMware虚拟机设置中的网络适配器设置
    js图片随鼠标移动,旋转,拉伸
    JDK1.8的Lambda、Stream和日期的使用详解
    MySQL Explain详解
    为什么我使用了索引,查询还是慢?
  • 原文地址:https://www.cnblogs.com/joeylee97/p/6815938.html
Copyright © 2011-2022 走看看