01背包 java代码_01背包问题JAVA实现
在刷华为机试的在线编程,碰到一个类似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实现相关推荐
- 01背包python解法_0-1背包问题及Python代码实现
1.简介 假设我们有n件物品,分别编号为1, 2...n.其中编号为i的物品价值为vi,它的重量为wi.为了简化问题,假定价值和重量都是整数值.现在,假设我们有一个背包,它能够承载的重量是W.现在,我 ...
- Java代码加密,Java加密方式,Java加密使用说明
概述 Java2C针对DEX文件进行加密保护,将DEX文件中标记的Java代码翻译为C代码,编译成加固后的SO文件.默认情况只加密activity中的onCreate函数,如果开发者想加密其它类和方法 ...
- akka actor java_Akka:使用非默认构造函数在Scala中定义一个actor并从Java代码创建它 - java...
Akka Scala演员必须扩展akka.actor.Actor Akka Java actor必须扩展akka.actor.UntypedActor 因此,在使用非默认构造函数定义Scala act ...
- scala调用java代码_scala调用java代码
scala调用java代码 @(SCALA)[scala] 在scala中调用java代替非常非常简单,直接调用即可 (一)一个简单示例 1.创建一个java类 package com.lujinho ...
- 连连看java代码_连连看 - java代码库 - 云代码
[java]代码库/* * To change this license header, choose License Headers in Project Properties. * To chan ...
- java如何调用网页_如何使用网页开发自己的app,在网页中的按钮与自己的java代码绑定来实现打电话即javascript代码调用java代码,和java代码来调用javascript代码...
1首先是如何在自己的app里用网页显示,这样可以较快的更新界面而不需要让客户端升级,方法如下: xml文件: android:layout_width="fill_parent" ...
- es文本分析java代码_Elasticsearch系列---Java客户端代码Demo
前言 前面历经33篇内容的讲解,与ES的请求操作都是在Kibana平台上用Restful请求完成的,一直没发布Java或python的客户端代码,Restful才是运用.理解ES核心功能最直接的表达方 ...
- java代码_【JAVA虚拟机(JVM)精髓】05-Java代码的执行过程
持续更新JVM相关知识,敬请关注: Java虚拟机精髓专栏zhuanlan.zhihu.com 这里再简单回顾下Java代码执行的整个过程,首先是前端编译过程,java源文件,通过前端编译器,生成出 ...
- 医院医生评价的java代码_基于JAVA的医院信息查询接口调用代码实例
基于JAVA的医院信息查询接口调用代码实例 import java.io.BufferedReader; import java.io.DataOutputStream; import java.io ...
最新文章
- LeetCode 289. Game of Life--Java,Python解法
- jni invalid jobject
- linux下nano修改并保存
- gitbook新版本 build命令导出的html不能跳转?
- python高维数据_t-SNE高维数据可视化(python)
- [数据预处理] onehot编码:是什么,为什么,怎么样
- document.addEventListener的使用介绍
- 织梦php 文章采集规则,如何正确写DedeCms采集规则
- Halcon教程三:了解基础算子
- CADD课程学习(2)-- 靶点晶体结构信息
- JavaScript arguments详解
- Echo,Linux上最忧伤的命令(故事)
- 基于OpenXR,Collabora推开源VI-SLAM AR/VR定位系统
- 系统突然变慢的处理方案
- 达梦数据库的连接(四种方式-亲测可用)达梦数据库的几大小助手工具
- java从小白到老白⑤——传智播客27版笔记
- emmc和SPI共舞
- 电路基础 01电压、电流和功率
- unity 画球面_unity3d第一个例子--制作一个简单的球体碰撞墙面
- nested exception is redis.clients.jedis.exceptions.JedisDataException: NOAUTH Authentication requir
热门文章
- 女神节特辑 | 5%的故事,看见女性开发者的力量
- Jquery 15 天教程
- 服务器主板的jtag模块作用,一种基于申威芯片的国产服务器主板的实现方法与流程...
- PaddleOCR简单使用,识别文字测试
- HNU软件能力实训3-4. 打牌
- 打动人心的演讲方法有哪些
- python openpyxl #Value!
- java 1.5.0_11_我的世界1.5.0.11
- java编码 第一次
- 【海浪建模2】三维海浪建模以及海浪发电机建模matlab仿真