贪心算法实例(五):小船过河问题
来源:互联网 发布:破解版阅读软件 编辑:程序博客网 时间:2024/05/01 22:08
N个人过河,船每次只能坐两个人,船载每个人过河的所需时间不同t[i],每次过河的时间为船上的人的较慢的那个,问最快的过河时间。(船划过去要有一个人划回来)
最优选择:
先将所有人过河所需的时间按照升序排序,我们考虑把单独过河所需要时间最多的两个旅行者送到对岸去,有两种方式:
1.最快的和次快的过河,然后最快的将船划回来;次慢的和最慢的过河,然后次快的将船划回来,所需时间为:t[0]+2*t[1]+t[n-1];
最优选择:
先将所有人过河所需的时间按照升序排序,我们考虑把单独过河所需要时间最多的两个旅行者送到对岸去,有两种方式:
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); }}
阅读全文
0 0
- 贪心算法实例(五):小船过河问题
- 贪心之小船过河问题
- ACM算法之小船过河问题
- 小船过河问题
- 贪心算法--过河问题
- SDAU 贪心专题 14 小船过河
- poj1700 过河问题---贪心算法
- 贪心算法之——过河问题(nyoj47)
- nyoj47过河问题(贪心)
- nyoj47过河问题(贪心)
- 过河问题(贪心)nyoj47
- 贪心算法之 nyoj47过河问题
- 利用贪心算法计算袋鼠过河问题
- C语言贪心算法之过河问题
- 贪心问题--过河问题
- 过河问题(南阳oj47)(贪心)
- NYOJ47——过河问题(贪心)
- NYOJ-47 过河问题(贪心)
- 【算法题】丑陋的字符串
- 嵌入式Linux设备驱动开发笔记(二)
- RedHat nfs文件挂载
- C++查漏补缺
- The value for the useBean class attribute XXX is invalid.解决方法
- 贪心算法实例(五):小船过河问题
- form中获取field+textfield赋值+combo的自动赋值+ 重置表单
- 网页服务器开发:CGI(2)
- Mybatis foreach 问题 Parameter 'item' not found
- HTTP协议详解
- Java+Selenium3方法篇10-findElement之By PartialLinkText
- Spring Security(19)——对Acl的支持
- 泛型与函数式比较
- WebRTC 初探