zoukankan      html  css  js  c++  java
  • NYOJ-47过河问题

    这是一道经典的贪心算法的题目。首先说一下我对这道题的理解:

      n个人要过河,已知每个人的过河时间且过河时必须要使用唯一的手电筒。桥只能允许最多

    两个人同时过河。让求所有人都过河后的最短时间。

      我们不难知道:必须同时两个人过河,因为要把手电筒送回来,让为过河的人过河。使用贪

    心的思想解决这个问题,首先要对这n个人的过河时间排序并保存在数组S中。这也是大多数贪心

    解决问题的共同点。

      根据贪心原则,我们有两个贪心策略:

      策略A: 让最快的两个人去送最慢的两个人。首先S[0]和S[1]过河,S[0]把手电筒送回来,接着

    最慢的两个人S[n-1],S[n-2]拿着手电筒过河。然后S[1]把手电筒送回来。注意:次慢的这个人相当

    于没有花费时间就过去了(相对于策略B来说),这一点对于理解为什么要比较两种策略的最短时间

    很重要。 此时S[0],S[1]都在未过河的这一岸,然后S[0],S[1]在接着送目前最慢的两个人S[n-3],

    S[n-4],以此类推。

      策略B:一直让最快的人送当前状态最慢的人。S[0]先把S[n-1],送到对岸,拿着手电筒回来,

    再送S[n-2]。相当于单独一个人依次过河,再加上最快人的送手电筒的时间。

    (未完持续)

  • 相关阅读:
    Cmd Markdown 公式指导手册
    ubuntu 21.10 上的一些必备库的安装 opengl, opencv
    MarkDown 数学公式
    免费代理IP地址列表
    pyexecl的使用
    磁盘IO满负荷性能分析
    DRM 简介
    Oracle修改字符集ORA02374,ORA12899,ORA02372
    oracle grid修改ip
    Oracle性能问题一般排查方法
  • 原文地址:https://www.cnblogs.com/yfs123456/p/5511672.html
Copyright © 2011-2022 走看看