贪心算法实例(五):小船过河问题
N个人过河,船每次只能坐两个人,船载每个人过河的所需时间不同t[i],每次过河的时间为船上的人的较慢的那个,问最快的过河时间。(船划过去要有一个人划回来)
最优选择:
先将所有人过河所需的时间按照升序排序,我们考虑把单独过河所需要时间最多的两个旅行者送到对岸去,有两种方式:
1.最快的和次快的过河,然后最快的将船划回来;次慢的和最慢的过河,然后次快的将船划回来,所需时间为:t[0]+2*t[1]+t[n-1];
2.最快的和最慢的过河,然后最快的将船划回来,最快的和次慢的过河,然后最快的将船划回来,所需时间为:2*t[0]+t[n-2]+t[n-1]。
具体实现代码如下所示:
/** * @Title: ShipCrossRiver.java * @Package greedyalgorithm * @Description: TODO * @author peidong * @date 2017-5-19 上午9:03:51 * @version V1.0 */ package greedyalgorithm; import java.util.Arrays; import java.util.Scanner; /** * @ClassName: ShipCrossRiver * @Description:小船过河 * @date 2017-5-19 上午9:03:51 * */ public class ShipCrossRiver {/** * * @Title: compare * @Description: 判断大小 * @param a * @param b * @return * @return boolean * @throws */ public static boolean compare(int a, int b) {return a < b; }/** * @Title: main * @Description: TODO * @param args * @return void * @throws */ public static void main(String[] args) {// TODO Auto-generated method stub System.out.println("请输入数组长度:"); Scanner sc = new Scanner(System.in); int N = sc.nextInt(); int[] array = new int[N]; System.out.println("请输入数组元素:"); for (int i = 0; i < N; i++) {array[i] = sc.nextInt(); // 输入数组 }Arrays.sort(array); //升序排列 int sum = 0; while (N > 3) { //贪心算法实现 int less = array[0] + 2 * array[1] + array[N - 1]; if ((array[0] + 2 * array[1] + array[N - 1]) > (2 * array[0]+ array[N - 2] + array[N - 1])) // 两种方式选择 less = 2 * array[0] + array[N - 2] + array[N - 1]; sum += less; N -= 2; }//边界条件讨论 if (N == 3) {sum += array[0] + array[1] + array[2]; // 只剩三人 } else if (N == 2) {sum += array[1]; // 只剩两人 } else {sum += array[0]; }System.out.println("总过河时间为:" + sum); } }
贪心算法实例(五):小船过河问题相关推荐
- 贪心算法实例(一):多任务分配问题
给出n个任务和每个任务的开始和结束时间.找出可以完成的任务的最大数量,在同一时刻只能做一个任务. 例子: 下面的6个任务: start[] = {1, 3, 0, 5, 8, 5}; finish ...
- [python算法]贪心算法+实例
目录 什么是贪心算法 应用实例 找零问题 背包问题 拼接数字问题 活动选择问题 什么是贪心算法 贪心算法(又称贪婪算法)是指,在对问题求解时,总是做出在当前看来是最好的选择. 也就是说,不从整体最优上 ...
- 【趣学算法】贪心算法
14天阅读挑战赛 努力是为了不平庸~ 算法学习有些时候是枯燥的,这一次,让我们先人一步,趣学算法!欢迎记录下你的那些努力时刻(算法学习知识点/算法题解/遇到的算法bug/等等),在分享的同时加深对于算 ...
- 贪心算法:小船过河问题
贪心算法:小船过河问题 题意:N个人过河,船每次只能坐两个人,船载每个人过河的所需时间不同t[i],每次过河的时间为船上的人的较慢的那个,问最快的过河时间.(船划过去要有一个人划回来) 最优选择: 先 ...
- 活动选择与小船过河问题(贪心算法)
活动选择问题描述: 存在一个教室,有下面若干个活动需要安排在一天进行,活动之间不能重叠,如何安排活动使活动的数量最多? 活动序号 1 2 3 4 5 6 7 8 9 10 11 (活动已经按结束时间 ...
- 过河问题(贪心算法)(python)
过河问题(贪心算法) - CapitalAccumulation - 博客园 思路非常清晰 过河问题 一.问题描述 二.问题答案 三.扩展 四.问题推广 五.对于本题的最优选择: coding 一.问 ...
- <贪心算法>学习及经典实例分析
前言 人生如逆旅,我亦是行人. 贪心算法(Greedy Algorithm) 贪心算法(Greedy Algorithm,又称贪婪算法):是指,在对问题求解时,总是做出在当前看来是最好的选择.也就是说 ...
- 农夫过河——python贪心算法实现
1.问题描述: 一个农夫在河的西岸带了一匹狼.一只羊和一棵白菜,他需要把这三样东西用船带到河的东岸.然而,这艘船只能容下农夫本人和另外一样东西.如果农夫不在场的话,狼会吃掉羊,羊也会吃掉白菜. 2.问 ...
- 贪心算法----过河问题
问题: 在漆黑的夜里,N位旅行者来到了一座狭窄而且没有护栏的桥边.如果不借助手电筒的话,大家是无论如何也不敢过桥去的.不幸的是,N个人一共只带了一只手电筒,而桥窄得只够让两个人同时过.如果各自单独过桥 ...
最新文章
- linux中sqlplus不能用_装修中不能用海沙,但是海沙已经偷偷走进了你的家
- 最受欢迎的女友职业排行榜Top10
- 建立Vue脚手架的必要性
- ArcGIS中的WKID(转)
- deebot扫地机器人怎么清洁_扫地机器人清洁力拼杀,科沃斯机器人DEEBOT N3与小米1S对比评测...
- MongoDB两阶段提交实现事务
- 卷积神经网络(CNN)之卷积层的实现
- Win10系统如何解除U盘写保护模式
- WebStorm中配置node.js(Windows)
- bootstrap datetimepicker日期插件使用方法
- 网 络 响 应 状 态 码 常 见 的 错 误 代 码 及 错 误 原 因
- 高中数学建模优秀论文_数学建模论文 高中数学建模经典例题
- 微信小程序学习(二)开发环境部署和了解
- python代码螺旋线怎么写_用Python绘制三轴对数螺旋线
- 【CGAL_多面体】3D多面体表面
- 解决百度推送not_same_site的问题
- python 生成词云
- 使用Java实现MP3音乐播放
- 苹果电脑Android我的电脑,苹果电脑连接安卓手机怎么在电脑上找到手机文件?...
- 软件工程文档——步骤流程图
热门文章
- 使用高德sdk时,提供SHA1
- 线性动态系统LDS(别名:卡尔曼滤波)
- 如何打动用户?携程用户体验实践分享
- 【python】backgroundremover 去除背景
- #详细分析# MySQL的 commit 和 rollback 操作
- 如何用切片工具做html网页,ps中的切片工具怎么用,怎么将html文本添加到切片...
- Java Scanner常用用法
- Householder transformation + QL to calculate eigenValue and eigenVectors of Hertian Matrix, cpu code
- jmeter监听器---聚合数据样本展示
- Metaq的一些简单机制