在刷华为机试的在线编程,碰到一个类似01背包问题的题目,综合了一些资料,写一些自己的理解

01背包问题就是在有限的称重容量下,求最大价值的问题

假设几个参数:

w[i]:第i个物品的重量;

p[i]:第i个物品的价值;

v[i][j]:表示在前i个物品中,总重量为j时的最大价值;

v[i-1][j-w[i]]:表示前i-1个物品中,加入第i个物品后的承重容量下的最大价值;

我们分析:在加入第i件物品前,我们要考虑要不要加进去,不加进去,那么就是v[i][j]=v[i-1][j];如果加进去,那么v[i][j]=v[i-1][j-w[i]]+p[i]

具体的例子例如

有编号分别为a,b,c,d,e的五件物品,它们的重量分别是2,2,6,5,4,它们的价值分别是6,3,5,4,6,现在给你个承重为10的背包,如何让背包里装入的物品具有最大的价值总和?

首先要明确这张表是至底向上,从左到右生成的。

为了叙述方便,用e2单元格表示e行2列的单元格,这个单元格的意义是用来表示只有物品e时,有个承重为2的背包,那么这个背包的最大价值是0,因为e物品的重量是4,背包装不了。

对于d2单元格,表示只有物品e,d时,承重为2的背包,所能装入的最大价值,仍然是0,因为物品e,d都不是这个背包能装的。

同理,c2=0,b2=3,a2=6。

那么状态转移方程就可以表示为:

v[i][j]=max{v[i-1][j],v[i-1][j-w[i]]+p[i]}

那么代码实现如下:

import java.util.*;

public class Main {

public static void main(String[] args) {

// TODO Auto-generated method stub

int weight = 10;

int n = 3;

int[] w = {3,4,5};

int[] p = {4,5,6};

System.out.println(getMaxweight(w, p, weight, n));

}

public static int getMaxweight(int[] w, int[] p, int weight, int n){

int[][] value = new int[n+1][weight+1];

for(int i = 1;i<=n;i++){

for(int j = 1;j<=weight;j++){

//当物品为i件重量为j时,如果第i件的重量(w[i-1])小于重量j时,c[i][j]为下列两种情况之一:

//(1)物品i不放入背包中,所以c[i][j]为c[i-1][j]的值

//(2)物品i放入背包中,则背包剩余重量为j-w[i-1],所以c[i][j]为c[i-1][j-w[i-1]]的值加上当前物品i的价值

if(w[i-1]<=j){

value[i][j]=Math.max(value[i-1][j], value[i-1][j-w[i-1]]+p[i-1]);

}

}

}

return value[n][weight];

}

}

01背包 java代码_01背包问题JAVA实现相关推荐

  1. 01背包python解法_0-1背包问题及Python代码实现

    1.简介 假设我们有n件物品,分别编号为1, 2...n.其中编号为i的物品价值为vi,它的重量为wi.为了简化问题,假定价值和重量都是整数值.现在,假设我们有一个背包,它能够承载的重量是W.现在,我 ...

  2. Java代码加密,Java加密方式,Java加密使用说明

    概述 Java2C针对DEX文件进行加密保护,将DEX文件中标记的Java代码翻译为C代码,编译成加固后的SO文件.默认情况只加密activity中的onCreate函数,如果开发者想加密其它类和方法 ...

  3. akka actor java_Akka:使用非默认构造函数在Scala中定义一个actor并从Java代码创建它 - java...

    Akka Scala演员必须扩展akka.actor.Actor Akka Java actor必须扩展akka.actor.UntypedActor 因此,在使用非默认构造函数定义Scala act ...

  4. scala调用java代码_scala调用java代码

    scala调用java代码 @(SCALA)[scala] 在scala中调用java代替非常非常简单,直接调用即可 (一)一个简单示例 1.创建一个java类 package com.lujinho ...

  5. 连连看java代码_连连看 - java代码库 - 云代码

    [java]代码库/* * To change this license header, choose License Headers in Project Properties. * To chan ...

  6. java如何调用网页_如何使用网页开发自己的app,在网页中的按钮与自己的java代码绑定来实现打电话即javascript代码调用java代码,和java代码来调用javascript代码...

    1首先是如何在自己的app里用网页显示,这样可以较快的更新界面而不需要让客户端升级,方法如下: xml文件: android:layout_width="fill_parent" ...

  7. es文本分析java代码_Elasticsearch系列---Java客户端代码Demo

    前言 前面历经33篇内容的讲解,与ES的请求操作都是在Kibana平台上用Restful请求完成的,一直没发布Java或python的客户端代码,Restful才是运用.理解ES核心功能最直接的表达方 ...

  8. java代码_【JAVA虚拟机(JVM)精髓】05-Java代码的执行过程

    持续更新JVM相关知识,敬请关注: Java虚拟机精髓专栏​zhuanlan.zhihu.com 这里再简单回顾下Java代码执行的整个过程,首先是前端编译过程,java源文件,通过前端编译器,生成出 ...

  9. 医院医生评价的java代码_基于JAVA的医院信息查询接口调用代码实例

    基于JAVA的医院信息查询接口调用代码实例 import java.io.BufferedReader; import java.io.DataOutputStream; import java.io ...

最新文章

  1. LeetCode 289. Game of Life--Java,Python解法
  2. jni invalid jobject
  3. linux下nano修改并保存
  4. gitbook新版本 build命令导出的html不能跳转?
  5. python高维数据_t-SNE高维数据可视化(python)
  6. [数据预处理] onehot编码:是什么,为什么,怎么样
  7. document.addEventListener的使用介绍
  8. 织梦php 文章采集规则,如何正确写DedeCms采集规则
  9. Halcon教程三:了解基础算子
  10. CADD课程学习(2)-- 靶点晶体结构信息
  11. JavaScript arguments详解
  12. Echo,Linux上最忧伤的命令(故事)
  13. 基于OpenXR,Collabora推开源VI-SLAM AR/VR定位系统
  14. 系统突然变慢的处理方案
  15. 达梦数据库的连接(四种方式-亲测可用)达梦数据库的几大小助手工具
  16. java从小白到老白⑤——传智播客27版笔记
  17. emmc和SPI共舞
  18. 电路基础 01电压、电流和功率
  19. unity 画球面_unity3d第一个例子--制作一个简单的球体碰撞墙面
  20. nested exception is redis.clients.jedis.exceptions.JedisDataException: NOAUTH Authentication requir

热门文章

  1. 女神节特辑 | 5%的故事,看见女性开发者的力量
  2. Jquery 15 天教程
  3. 服务器主板的jtag模块作用,一种基于申威芯片的国产服务器主板的实现方法与流程...
  4. PaddleOCR简单使用,识别文字测试
  5. HNU软件能力实训3-4. 打牌
  6. 打动人心的演讲方法有哪些
  7. python openpyxl #Value!
  8. java 1.5.0_11_我的世界1.5.0.11
  9. java编码 第一次
  10. 【海浪建模2】三维海浪建模以及海浪发电机建模matlab仿真