• 渡河问题


    昨天第一次做腾讯的笔试,第一题题目意思我实在理解不了,第二题挺简单的,第三题是经典的“渡河问题”

    学习一下渡河问题

    一队人(N个人)期望跨河,有一条船,一次只能载2个人,过河之后需要有一个人划回来,所有人才能够跨河,每个人划船速度都不同,两个人一组整体速度是由划船速度较慢的决定的。问题:确定一种策略用最少的时间所有人都能过河。

    样例:
    输入:
    4
    1 2 5 10
    输出
    17

    我在笔试的时候只想到了分两种情况考虑,但是细节没有处理好。

    四个人按渡河时间从小到大排序 a, b, c, d, 共有 a + 3b + d 和 2a + b + c + d两种情况, 如下图:

    (图中假设人初始时都在左边)

    这样我们每次只考虑把 c 和 d 送到对面去的开销,最后只剩下少于4人的情况时再单独讨论。

    #include<iostream>
    #include<vector>
    using namespace std;
    
    int main(){
        int n;
        cin >> n;
        vector<int> arr(n, 0);
        for(int i = 0; i < n; i++){
            cin>>arr[i];
        }
        int left = n;
        int cost = 0;
        while(left > 0){
            if(left == 1){
                cost += arr[0];
                break;
            }else if(left == 2){
                cost += arr[1];
                break;
            }else if(left == 3){
                cost += arr[0] + arr[1] + arr[2];
                break;
            }else{
                int s1 = arr[0] + arr[1] * 2 + arr[left - 1];
                int s2 = arr[0] * 2 + arr[left - 1] + arr[left - 2];
                cost += min(s1, s2);
                left -= 2;
            }
        }
        cout<<cost<<endl;
        return 0;
    }
  • 相关阅读:
    整数拆分问题的四种解法
    通配符匹配算法
    grundland去色
    rgb和lab的转换
    .Net library that makes converting between color spaces and comparing colors easy
    彩色图像灰度化论文
    ps图片黑白调整算法
    分数化小数算法
    计算机安全专有名词
    入侵检测
  • 原文地址:https://www.cnblogs.com/Dancing-Fairy/p/14619441.html
Copyright © 2020-2023  润新知