【转】小船过河问题(贪心)
转载自:https://www.cnblogs.com/ALL-pp/p/6204138.html
题意:
N个人过河,船每次只能坐两个人,船载每个人过河的所需时间不同t[i],每次过河的时间为船上的人的较慢的那个,问最快的过河时间。(船划过去要有一个人划回来)
最优选择:
先将所有人过河所需的时间按照升序排序,我们考虑把单独过河所需要时间最多的两个旅行者(为什么是两个?因为最慢的过河的时候可以带着次慢的一起过河)送到对岸去,有两种方式:
1.最快的和次快的过河,然后最快的将船划回来;次慢的和最慢的过河,然后次快的将船划回来,所需时间为:t[0]+2t[1]+t[n-1];
2.最快的和最慢的过河,然后最快的将船划回来,最快的和次慢的过河,然后最快的将船划回来,所需时间为:2t[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 2 3 4 5 6 7 8 9 10 11 (活动已经按结束时间 ...
- 小船过河(贪心算法)
题目 只有一艘船,最多能乘2人,船的运行速度为2人中较慢一人的速度,过去后还需一个人把船划回来,问把n个人运到对岸,最少需要多久. 输入: 4 1 2 5 10 输出: 17 思考 1.因为考虑到需要 ...
- 贪心算法实例(五):小船过河问题
N个人过河,船每次只能坐两个人,船载每个人过河的所需时间不同t[i],每次过河的时间为船上的人的较慢的那个,问最快的过河时间.(船划过去要有一个人划回来) 最优选择: 先将所有人过 ...
- 贪心算法:小船过河问题
贪心算法:小船过河问题 题意:N个人过河,船每次只能坐两个人,船载每个人过河的所需时间不同t[i],每次过河的时间为船上的人的较慢的那个,问最快的过河时间.(船划过去要有一个人划回来) 最优选择: 先 ...
- 小船过河 matlab,小船过河matlab实现.doc_蚂蚁文库
小船过河 matlab实现.doc (一)问题分析一只小船要渡过一条宽为d的河流,目标是起点A正对着的另一岸B点.已知河水的流速v1与船在静水中的速度v2之比为k.(1)建立小船的航线模型,并求其解析 ...
- 贪心算法——小船过河
题意:N个人过河,船每次只能坐两个人,船载每个人过河的所需时间不同t[i],每次过河的时间为船上的人的较慢的那个,问最快的过河时间.(船划过去要有一个人划回来) #include<iostrea ...
- 农夫过河——python贪心算法实现
1.问题描述: 一个农夫在河的西岸带了一匹狼.一只羊和一棵白菜,他需要把这三样东西用船带到河的东岸.然而,这艘船只能容下农夫本人和另外一样东西.如果农夫不在场的话,狼会吃掉羊,羊也会吃掉白菜. 2.问 ...
- 哈理工OJ-1584-青蛙过河【贪心+二分】
青蛙王国一年一度的游戏又开始了,这个游戏要求青蛙必须跳过河.河的宽度是 L .河里有n块石头,这n块石头从河的一边笔直的连到另一边.青蛙只能踩着石头过河,如果它们掉到水里,将被淘汰出局.游戏规定青蛙最 ...
- 经典小船过河问题,附Python,java题解
同学在面试时遇到了一个有趣的编程题,笔者很有兴趣,故以此文章作为记录. 题目: N个人过河,船每次只能坐两个人,船载每个人过河的所需时间不同t[i],每次过河的时间为船上的人的较慢的那个,问最快的过河 ...
最新文章
- 计算机页面的滚动栏怎么拉长,长滚动网页页面设计技巧
- 2019中南大学考研计算机考试,中南大学2019年全国硕士研究生入学考试《计算机网络》考.PDF...
- Windows Phone 7 中的页面和弹出框
- 线程安全退出 VS PostMessage,SendMessage的区别
- 在ABAP里取得一个数据库表记录数的两种方法
- 问题解决: 此文件来自其他计算机,可能被阻止以帮助保护该计算机
- clob大数据转换为多行数据
- csdn下载频道处理公告
- 详解Unity中的摄像机及实例应用
- libmodbus 封装成dll_Windows Visual Studio 2017 编译 libmodbus
- Chrome 页面呈现原理与性能优化(内附分享 ppt)
- Dashboard Design 4.0(Xcelsius)数据直接绑定功能:瑕瑜互见
- 鼠标点击右键,反应慢,解决方法!
- 火车采集器采集ajax,火车头采集器JavaScript之ajax网站采集实例教程
- prometheus监控告警功能
- ubuntu 20.04 安装录屏软件 OBS 及卸载
- 电脑连上了WIFI但打不开网页
- R 语言 ARMA 建模
- SSM出租车查询系统毕业设计-附源码220915
- 随访系统学习笔记之ModelBinder