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);
    }
}

贪心算法实例(五):小船过河问题相关推荐

  1. 贪心算法实例(一):多任务分配问题

    给出n个任务和每个任务的开始和结束时间.找出可以完成的任务的最大数量,在同一时刻只能做一个任务. 例子: 下面的6个任务: start[]  =  {1, 3, 0, 5, 8, 5}; finish ...

  2. [python算法]贪心算法+实例

    目录 什么是贪心算法 应用实例 找零问题 背包问题 拼接数字问题 活动选择问题 什么是贪心算法 贪心算法(又称贪婪算法)是指,在对问题求解时,总是做出在当前看来是最好的选择. 也就是说,不从整体最优上 ...

  3. 【趣学算法】贪心算法

    14天阅读挑战赛 努力是为了不平庸~ 算法学习有些时候是枯燥的,这一次,让我们先人一步,趣学算法!欢迎记录下你的那些努力时刻(算法学习知识点/算法题解/遇到的算法bug/等等),在分享的同时加深对于算 ...

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

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

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

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

  6. 过河问题(贪心算法)(python)

    过河问题(贪心算法) - CapitalAccumulation - 博客园 思路非常清晰 过河问题 一.问题描述 二.问题答案 三.扩展 四.问题推广 五.对于本题的最优选择: coding 一.问 ...

  7. <贪心算法>学习及经典实例分析

    前言 人生如逆旅,我亦是行人. 贪心算法(Greedy Algorithm) 贪心算法(Greedy Algorithm,又称贪婪算法):是指,在对问题求解时,总是做出在当前看来是最好的选择.也就是说 ...

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

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

  9. 贪心算法----过河问题

    问题: 在漆黑的夜里,N位旅行者来到了一座狭窄而且没有护栏的桥边.如果不借助手电筒的话,大家是无论如何也不敢过桥去的.不幸的是,N个人一共只带了一只手电筒,而桥窄得只够让两个人同时过.如果各自单独过桥 ...

最新文章

  1. linux中sqlplus不能用_装修中不能用海沙,但是海沙已经偷偷走进了你的家
  2. 最受欢迎的女友职业排行榜Top10
  3. 建立Vue脚手架的必要性
  4. ArcGIS中的WKID(转)
  5. deebot扫地机器人怎么清洁_扫地机器人清洁力拼杀,科沃斯机器人DEEBOT N3与小米1S对比评测...
  6. MongoDB两阶段提交实现事务
  7. 卷积神经网络(CNN)之卷积层的实现
  8. Win10系统如何解除U盘写保护模式
  9. WebStorm中配置node.js(Windows)
  10. bootstrap datetimepicker日期插件使用方法
  11. 网 络 响 应 状 态 码 常 见 的 错 误 代 码 及 错 误 原 因
  12. 高中数学建模优秀论文_数学建模论文 高中数学建模经典例题
  13. 微信小程序学习(二)开发环境部署和了解
  14. python代码螺旋线怎么写_用Python绘制三轴对数螺旋线
  15. 【CGAL_多面体】3D多面体表面
  16. 解决百度推送not_same_site的问题
  17. python 生成词云
  18. 使用Java实现MP3音乐播放
  19. 苹果电脑Android我的电脑,苹果电脑连接安卓手机怎么在电脑上找到手机文件?...
  20. 软件工程文档——步骤流程图

热门文章

  1. 使用高德sdk时,提供SHA1
  2. 线性动态系统LDS(别名:卡尔曼滤波)
  3. 如何打动用户?携程用户体验实践分享
  4. 【python】backgroundremover 去除背景
  5. #详细分析# MySQL的 commit 和 rollback 操作
  6. 如何用切片工具做html网页,ps中的切片工具怎么用,怎么将html文本添加到切片...
  7. Java Scanner常用用法
  8. Householder transformation + QL to calculate eigenValue and eigenVectors of Hertian Matrix, cpu code
  9. jmeter监听器---聚合数据样本展示
  10. Metaq的一些简单机制