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]。相当于单独一个人依次过河,再加上最快人的送手电筒的时间。

    (未完持续)

  • 相关阅读:
    微信公众号对接配置
    ASP.NET MVC5+EF6+EasyUI 后台管理系统(89)-国际化,本地化,多语言应用
    Nacos安装教程
    IDEA 中创建SpringBoot 父子模块
    解决死锁之路(终结篇)
    CentOS安装node和npm
    CentOS安装RabbitMQ
    在LibreOffice中插入代码
    PowerShell查找程序路径
    使用命令行调用控制面板的选项
  • 原文地址:https://www.cnblogs.com/yfs123456/p/5511672.html
Copyright © 2011-2022 走看看