Java描述贪心算法解决背包问题

2023-11-11

思路: 首先将物品根据性价比排好序在一个集合里,性价比=价格/重量...

然后根据性价比从大到小依次依次放入背包,如果没办法放入这个物品的全部,就放入一部分,如果可以放入全量物品,就放入全量物品。


Main.java的代码

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;

/**
 * Created by HuLuo on 2016/2/16.
 */
public class Main
{
    //背包总质量
    private static double M = 20;

    //物品数量
    private static int number = 3;


    public static void main(String[] args)
    {
        MyObject myObject1 = new MyObject( 18, 25 );

        MyObject myObject2 = new MyObject( 15, 24 );

        MyObject myObject3 = new MyObject( 10, 15 );

        ArrayList<MyObject> myObjects = new ArrayList<MyObject>( number );

        myObject1.priceRatio = ( myObject1.price * 1.0 ) / ( myObject1.weight );

        myObject2.priceRatio = ( myObject2.price * 1.0 ) / ( myObject2.weight );

        myObject3.priceRatio = ( myObject3.price * 1.0 ) / ( myObject3.weight );


        myObjects.add( myObject1 );
        myObjects.add( myObject2 );
        myObjects.add( myObject3 );


        //根据物品的性价比将集合中的物品做一个排序 ,按照性价比从大到小排列
        Collections.sort( myObjects, new Comparator<MyObject>()
        {
            @Override
            public int compare(MyObject o1, MyObject o2)
            {
                if(o1.priceRatio > o2.priceRatio)
                {
                    return -1;
                }
                else
                    return 1;
            }

        } );

        MyObject temp = null;

        for(int i = 0; i < number && M > 0; i++)
        {
            temp = myObjects.get( i );

            if(M >= temp.weight)
            {
                M = M - temp.weight;

                temp.x = 1.0;
            }

            else
            {
                temp.x = ( M * 1.0 ) / temp.weight;

                M = M - ( temp.weight * temp.x );
            }
        }

        for(MyObject myObject : myObjects)
        {
            System.out.println( "物品价格是:" + myObject.price + "的物品, 装入比例是:" + myObject.x );
        }

    }
}



MyObject.java文件的代码

/**
 * Created by HuLuo on 2016/2/16.
 */

/**
 * 物品对象
 */
public class MyObject
{

    public int weight = 0;

    public int price = 0;

    //装入的比例
    public double x = 0;

    //性价比
    public double priceRatio = 0 ;

    public MyObject(int weight, int price)
    {
        this.weight = weight;

        this.price = price;
    }

}



本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java描述贪心算法解决背包问题 的相关文章

随机推荐

  • WDK学习笔记_区块链项目实现_MAE

    文章目录 摘要 项目 区块链凤鸡溯源项目的实现 实现总流程 1 1 编写区块链网络配置文件 1 1 1 证书配置文件 crypto config 总体逻辑 详情 代码 1 1 2 创世区块及通道配置文件 总体逻辑 详情 代码 1 1 3 启
  • Chrome浏览器修改页面背景色

    转自 http jingyan baidu com article 5552ef47315ef9518ffbc9e7 html 有时候我们用浏览器看网页的内容时 如果长时间盯着白底黑字的屏幕 眼睛会很累 希望把网页页面的默认颜色改为淡绿色
  • 二叉树概念

    1 掌握树的基本概念 树 是一类重要的非线性数据结构 是以分支关系定义的层次结构 每个结点有零个或多个子结点 没有父结点的结点称为根结点 每一个非根结点有且只有一个父结点 除了根结点外 每个子结点可以分为多个不相交的子树 2 掌握树的相关概
  • Nginx安装和反向代理配置

    什么是反向代理 反向代理是指以代理服务器来接受internet上的连接请求 然后将请求转发给内部网络上的服务器 并将从服务器上得到的结果返回给internet上请求连接的客户端 此时代理服务器对外就表现为一个反向代理服务器 反向代理代理的是
  • 查看相关性

    查看相关性 方法一 df to csv data1 csv import matplotlib pyplot as plt import seaborn as sns 变量相关性分析 fig ax plt subplots fig set
  • 逻辑回归案例练习

    逻辑回归 场景一 在训练的初始阶段 我们将要构建一个逻辑回归模型来预测 某个学生是否被大学录取 设想你是大学相关部分的管理者 想通过查看申请学生的两次测试的评分 来决定他们是否被录取 现在你拥有之前申请学生的可以用于训练逻辑回归的训练样本集
  • 钉钉微应用接入(企业内部开发)

    文档中心 https open doc dingtalk com 钉钉后台配置 创建微应用流程 获取企业号CorpID Secret 登录钉钉OA管理后台 微应用 工作台设置 仅企业主管理员可查看 应用开发流程 注册企业 进入OA管理后台
  • 原来gdb的底层调试原理这么简单

    一 前言 这篇文章来聊聊大名鼎鼎的GDB 它的豪门背景咱就不提了 和它的兄弟GCC一样是含着金钥匙出生的 在GNU的家族中的地位不可撼动 相信每位嵌入式开发工程师都使用过gdb来调试程序 如果你说没有用过 那只能说明你的开发经历还不够坎坷
  • 【04】Unity AR 2022Vuforia——虚拟按钮超详细教程【含代码】

    04 Unity AR 2022Vuforia 虚拟按钮超详细教程 含代码 虚拟按钮超详细教程 含代码 目录 04 Unity AR 2022Vuforia 虚拟按钮超详细教程 含代码 1 前期工作 2 创建Virtual Button 3
  • Vue3-初识Vue3、创建Vue3工程、vue3组合式API(setup、ref函数、reactive函数)、响应式原理、计算属性、监视属性

    Vue3 1 目录 Vue3 1 一 Vue3简介 二 创建Vue3 0工程 1 使用vue cli创建 2 使用vite创建 三 常用的Composition API 组合式API 1 拉开序幕的setup 2 ref函数 3 react
  • Flutter沉浸式透明状态栏-flutter自定义凸起BottomAppBar导航

    注意 flutter项目默认是使用Kotlin语言 在Google I O 2017中 Google 宣布 Kotlin 取代 Java 成为 Android 官方开发语言 Kotlin详情见 https www kotlincn net
  • 异常处理--java.lang.reflect.MalformedParameterizedTypeException

    异常信息 org springframework beans factory BeanCreationException Error creating bean with name sqlSessionFactory defined in
  • C语言指针详解

    1 指针是什么 指针是内存中一个最小单元的编号 也就是地址 平时口语中说的指针 通常指的是指针变量 是用来存放内存地址的变量 所以 指针就是地址 口语中说的指针通常指的是指针变量 1 指针变量 我们可以通过 取地址操作符 取出变量的内存其实
  • 活动效果评估体系,该怎么搭建?

    如果让你来评估这次活动 你会怎么分析 无论是面试还是工作 做数据分写的同学都经常遇到这个问题 今天我们系统讲解一下 场景还原 某音乐类APP 对新用户进行一个新注册即送7天会员权益的活动 用户注册后 自主决定是否点击领取 为期1个月 问 如
  • python函数定义参数类型和返回值类型

    python中我们也可以定义函数的参数类型和返回值类型 如下代码 函数参数和返回值的类型声明 python函数类型的声明 更加有意义 更加实用一些 def add a b param a int param b int return int
  • C++ STL中map.erase(it++)用法原理解析

    之前在代码中使用map erase函数时 误搬了vector erase的用法 导致Server down掉了 好在在测试环境就及时发现了问题 在上线前进行了补救 以下总结一下map erase的正确用法 首先看一下在循环中使用vector
  • 灰灰-325-326-327-2019中南大学计算机上机-走台阶(3)

    1 n个台阶 一次走1阶或2阶 问走n阶有多少可能 1 lt n lt 1000 000 结果用1000 0000 7取模输出 输入格式 输入台阶数n 输出格式 结果用1000 0000 7取模输出 输入样例 3 输出样例 3 includ
  • 【技巧】各编辑器基础开发快捷键

    文章目录 一 IDEA 二 vim 1 各个模式的相互切换 2 正常模式 3 插入模式 4 底行模式 5 视图模式 三 Visual Studio 2017 四 PyCharm 一 IDEA psvm 回车 快速打出main函数 sout
  • docker网络自定义

    docker网络自定义 书接上回 我们认识了docker0网络以及 link参数的使用 https blog csdn net hello list article details 124815842 今天来了解下docker自定义网络 那
  • Java描述贪心算法解决背包问题

    思路 首先将物品根据性价比排好序在一个集合里 性价比 价格 重量 然后根据性价比从大到小依次依次放入背包 如果没办法放入这个物品的全部 就放入一部分 如果可以放入全量物品 就放入全量物品 Main java的代码 import java u