转载自:https://www.cnblogs.com/ALL-pp/p/6204138.html
题意:

N个人过河,船每次只能坐两个人,船载每个人过河的所需时间不同t[i],每次过河的时间为船上的人的较慢的那个,问最快的过河时间。(船划过去要有一个人划回来)

最优选择:

先将所有人过河所需的时间按照升序排序,我们考虑把单独过河所需要时间最多的两个旅行者(为什么是两个?因为最慢的过河的时候可以带着次慢的一起过河)送到对岸去,有两种方式:
  1.最快的和次快的过河,然后最快的将船划回来;次慢的和最慢的过河,然后次快的将船划回来,所需时间为:t[0]+2t[1]+t[n-1];
  2.最快的和最慢的过河,然后最快的将船划回来,最快的和次慢的过河,然后最快的将船划回来,所需时间为:2
t[0]+t[n-2]+t[n-1]。

#include<iostream>
#include<algorithm>
using namespace std;
bool compare(int a, int b)
{return a < b;
}int main()
{int n;while(cin >> n){int *a = new int[n];for(int i = 0; i < n; i++){cin >> a[i];}sort(a, a + n, compare);int sum = 0;while(n > 3){int less = a[0] + 2 * a[1] + a[n - 1];if((a[0] + 2 * a[1] + a[n - 1]) > (2 * a[0] + a[n - 2] + a[n - 1]))//两种方式选择less = 2 * a[0] + a[n - 2] + a[n - 1];sum += less;n -= 2;}if(n == 3){sum += (a[0] + a[1] + a[2]); //剩三人}else if(n == 2) //剩两人{sum += a[1];}else sum += a[0];//剩一人cout << sum << "\n";}return 0;
}

【转】小船过河问题(贪心)相关推荐

  1. 活动选择与小船过河问题(贪心算法)

    活动选择问题描述: 存在一个教室,有下面若干个活动需要安排在一天进行,活动之间不能重叠,如何安排活动使活动的数量最多? 活动序号 1 2 3 4 5 6 7 8 9 10 11  (活动已经按结束时间 ...

  2. 小船过河(贪心算法)

    题目 只有一艘船,最多能乘2人,船的运行速度为2人中较慢一人的速度,过去后还需一个人把船划回来,问把n个人运到对岸,最少需要多久. 输入: 4 1 2 5 10 输出: 17 思考 1.因为考虑到需要 ...

  3. 贪心算法实例(五):小船过河问题

    N个人过河,船每次只能坐两个人,船载每个人过河的所需时间不同t[i],每次过河的时间为船上的人的较慢的那个,问最快的过河时间.(船划过去要有一个人划回来)     最优选择:       先将所有人过 ...

  4. 贪心算法:小船过河问题

    贪心算法:小船过河问题 题意:N个人过河,船每次只能坐两个人,船载每个人过河的所需时间不同t[i],每次过河的时间为船上的人的较慢的那个,问最快的过河时间.(船划过去要有一个人划回来) 最优选择: 先 ...

  5. 小船过河 matlab,小船过河matlab实现.doc_蚂蚁文库

    小船过河 matlab实现.doc (一)问题分析一只小船要渡过一条宽为d的河流,目标是起点A正对着的另一岸B点.已知河水的流速v1与船在静水中的速度v2之比为k.(1)建立小船的航线模型,并求其解析 ...

  6. 贪心算法——小船过河

    题意:N个人过河,船每次只能坐两个人,船载每个人过河的所需时间不同t[i],每次过河的时间为船上的人的较慢的那个,问最快的过河时间.(船划过去要有一个人划回来) #include<iostrea ...

  7. 农夫过河——python贪心算法实现

    1.问题描述: 一个农夫在河的西岸带了一匹狼.一只羊和一棵白菜,他需要把这三样东西用船带到河的东岸.然而,这艘船只能容下农夫本人和另外一样东西.如果农夫不在场的话,狼会吃掉羊,羊也会吃掉白菜. 2.问 ...

  8. 哈理工OJ-1584-青蛙过河【贪心+二分】

    青蛙王国一年一度的游戏又开始了,这个游戏要求青蛙必须跳过河.河的宽度是 L .河里有n块石头,这n块石头从河的一边笔直的连到另一边.青蛙只能踩着石头过河,如果它们掉到水里,将被淘汰出局.游戏规定青蛙最 ...

  9. 经典小船过河问题,附Python,java题解

    同学在面试时遇到了一个有趣的编程题,笔者很有兴趣,故以此文章作为记录. 题目: N个人过河,船每次只能坐两个人,船载每个人过河的所需时间不同t[i],每次过河的时间为船上的人的较慢的那个,问最快的过河 ...

最新文章

  1. 计算机页面的滚动栏怎么拉长,长滚动网页页面设计技巧
  2. 2019中南大学考研计算机考试,中南大学2019年全国硕士研究生入学考试《计算机网络》考.PDF...
  3. Windows Phone 7 中的页面和弹出框
  4. 线程安全退出 VS PostMessage,SendMessage的区别
  5. 在ABAP里取得一个数据库表记录数的两种方法
  6. 问题解决: 此文件来自其他计算机,可能被阻止以帮助保护该计算机
  7. clob大数据转换为多行数据
  8. csdn下载频道处理公告
  9. 详解Unity中的摄像机及实例应用
  10. libmodbus 封装成dll_Windows Visual Studio 2017 编译 libmodbus
  11. Chrome 页面呈现原理与性能优化(内附分享 ppt)
  12. Dashboard Design 4.0(Xcelsius)数据直接绑定功能:瑕瑜互见
  13. 鼠标点击右键,反应慢,解决方法!
  14. 火车采集器采集ajax,火车头采集器JavaScript之ajax网站采集实例教程
  15. prometheus监控告警功能
  16. ubuntu 20.04 安装录屏软件 OBS 及卸载
  17. 电脑连上了WIFI但打不开网页
  18. R 语言 ARMA 建模
  19. SSM出租车查询系统毕业设计-附源码220915
  20. 随访系统学习笔记之ModelBinder

热门文章

  1. js炫酷烟花代码,手动自动燃放都可以哦
  2. python pandas 日期计算_pandas dataframe 日期间隔天数计算问题
  3. 【日常学习】【数学】codevs3625 士兵站队问题题解
  4. 【无标题】IP地址段必须正好可以聚合成1个地址块
  5. Android USB HID整理
  6. 【camera】Mtk相机冷启动的拆解笔记
  7. Java、JavaScript、C语言数组的创建
  8. 奈学教育《大数据架构师》课程大纲
  9. Java 校验注解的使用、自定义校验注解
  10. linux内存、cpu查看