贪心算法(最优装载)

贪心算法


前言

贪心算法总是做出当前看来最好的选择,但是最后在整体上看来也是最好的选择。
也就是说选择局部最优,最终整体最优
注意:贪心算法并不考虑整体最优

一、贪心算法是什么?

1、贪心算法意义

贪心算法通过一系列的选择得到问题的解。他所做出的每一个选择都是当前状态下局部最好选择(贪心选择)。
示例:当前有7个活动需要在同一场地举行,这些活动开始键时间,结束时间不完全相同。现在给定一段时间,你能算出最多可以举办多少个活动吗?
活动编号 开始时间 结束时间 1 1 5 2 3 4 3 4 5 如果我们把结束时间从小到大排序(即留出最多的时间给后面的活动,最优选择),在对剩下的有序活动进行选择(下一个活动的开始时间大于前一个活动的结束时间)即可得出最优解。

2、贪心算法使用条件

要使用贪心算法,该问题需要具备:最优子结构性质贪心选择性质

贪心选择性质:选择当前最优解,局部最优。不考虑将来。

3、贪心算法和动态规划的区别

很多问题都能用贪心算法和动态规划得到最优解,但有的问题只能使用动态规划(如01背包),因为这些问题没有贪心选择性质。
动态规划和贪心算法都具有最优子结构性质,但贪心算法还具备贪心选择性质,而动态规划还具备子问题重叠性质

二、贪心算法之最优装载

1.问题描述

输入包括两部分, 第一行包括集装箱个数n,以及船的装载量C。 接下来n行每行则输入集装箱编号以及其重量。
输出包括两行,第一行为最多可装载的集装箱数量 。 第二行则为最优装载方案对应的所有集装箱编号(按照装载次序输出,用空格隔开) 。
输入: 5 10 1 1 2 2 3 3 4 4 5 5 输出: 4 1 2 3 4

2.问题分析

问题没有提物品的价值,我们不需要考虑总价值,只需要确保个数最多。每次选择最轻的,即存在贪心选择。

3.代码

代码如下(示例):


import java.util.*;
import java.util.Scanner;
import java.util.Scanner;
public class Main {
   
    public static void main(String[] args) {
   
        Scanner in= new Scanner(System.in);
         while(in
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值