zoukankan      html  css  js  c++  java
  • POJ-1700-Crossing River

    贪心策略:

    要么让最快的人依次把最慢的两个人渡过河再回来。要么让最快的两个人先过河,最快的人回来,然后最慢的两个过河,第二快的回来。直到剩余人数少于4人为止;

    1700 Accepted 320K 16MS G++ 668B
    #include "cstdio"
    #include "algorithm"
    using namespace std;
    const int MAXN = 1000 + 5;
    int arr[MAXN];
    int cal(int n) {
        int ans = 0;
        while (n >= 4) {
            // 最快的人把最慢的两个人渡过河消耗的时间 
            int s1 = arr[n] + arr[n - 1] + arr[1] * 2;
            // 最快的两个人把最慢的两个人渡过河消耗的时间 
            int s2 = arr[2] * 2 + arr[1] + arr[n];
            ans += min(s1, s2);
            // 一次渡河之后不管选哪种渡河方式,最快的两个人都要回来 
            n -= 2;
        }
        if (n == 2) {
            return ans + arr[2];
        }
        for (int i = 1; i <= n; i++) {
            ans += arr[i];
        }
        return ans;
    }
    int main() {
        int t, n;
        scanf("%d", &t);
        while (t--) {
            scanf("%d", &n);
            for (int i = 1; i <= n; i++) {
                scanf("%d", &arr[i]);
            }
            sort(arr, arr + n);
            printf("%d
    ", cal(n));
        }
        return 0;
    }
  • 相关阅读:
    Python-异常处理机制
    递归函数——斐波那契数列j
    函数及相关操作
    字符串及相关操作
    集合及相关操作
    元组
    字典
    列表元素增删改排操作
    multiprocessing模块简单应用
    02 for循环创建进程
  • 原文地址:https://www.cnblogs.com/Angel-Demon/p/10341445.html
Copyright © 2011-2022 走看看