Skip to content

Instantly share code, notes, and snippets.

@jikeytang
Last active August 29, 2015 14:01
Show Gist options
  • Save jikeytang/b609b98f94d690b212eb to your computer and use it in GitHub Desktop.
Save jikeytang/b609b98f94d690b212eb to your computer and use it in GitHub Desktop.
[ Javascript ] - 20140523-题目1
有A、B、C、D四个人,要在夜里过一座桥。他们通过这座桥分别需要耗时1、2、5、10分钟,只有一支手电,
并且同时最多只能两个人一起过桥。请问,如何安排,能够在17分钟内这四个人都过桥?
PS:
1. 回复时注意加上下面这句话,才会有语法高亮或格式缩进。
```javascript
// you code
```
2. 粘贴代码时请使用shift+tab,缩进前面的空白。
@coderlee
Copy link

为了让程序适应各种不同的可能,我抽象了一下,一开始就只有三个人的话,必定要耗时最少的人送手电。
三个人以上,以四个为一个解决单元:两个最大值,两个最小值
由于为了不浪费时间,所以不一定能让耗时最短的人一直送手电,所以要两个最小值先过桥,过桥后:
分两种情况:
1、Min一直送手电:
耗时Max+Max2+Min
2、Min2参与送手电:
耗时Max+Min2+Min2
哪种耗时少,用哪种

数组里的两个最大值过桥后就不动,两个最小值一直参与上述计算,递归下去直到最后如果还留一个人没过桥,就让耗时最少的回去接。

有空再写程序。

@33nw
Copy link

33nw commented May 24, 2014

    var arr = [1, 2, 5, 7],
        length = arr.length,
        sum = 0,
        sum2 = 0;

    for (var i = 1; i < length; i++) {
        sum2 += arr[i];
    }

    sum2 += (length - 1) * arr[0];

    while (arr.length > 3) {
        var length = arr.length;
        sum += arr[0] + arr[1] * 2 + arr[length - 1];
        arr.length -= 2;
    }

    if (arr.length === 3) {
        sum += arr[0] + arr[1] + arr[2];
    } else {
        sum += arr[1];
    }

    console.log(Math.min(sum, sum2));

@jiangtao
Copy link

jiangtao commented Jun 5, 2014

抽象出来的情况好多

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment