01背包问题java_01背包问题—Java代码
一、问题
描述
给定 n 种物品和一个容量为 C 的背包,物品 i 的重量是 wi,其价值为 vi。
问:应该如何选择装入背包的物品,使得装入背包中的物品的总价值最大?
话不多说直接上代码
import java.util.Scanner;
public class bag01 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int num = sc.nextInt();
int max = sc.nextInt();
// 重量
int[] hight = new int[num+1];
// 钱
int[] money = new int[num+1];
//输入重量
for (int i = 1; i <= num; i++) {
hight[i] = sc.nextInt();
}
//输入重量
for (int i = 1; i <= num; i++) {
money[i] = sc.nextInt();
}
//创建num+1个背包,背包能承受的重量为max(0不包括,从1 开始)
int[][] arr = new int[num + 1][max + 1];
//arr[0]第一个背包什么都不装所以不遍历(全为0);
for (int i = 1; i <= num; i++) {
for (int j = 1; j <= max; j++) {
//当前共有i个物品
//如果当前的背包承受重量 j 大于第 i 个物品的重量,
if (i > 0 && hight[i] <= j) {
//那么对比上一个背包的当前背包承受重量的最大值 和 上一个背包减去当前 i 物品的重量hight[i],并加上 i 物品的价值money[i],
//就相当于把上个背包承受重量减去 i 的重量,这样就刚刚能塞下 i 物品,
//因为塞下 i 物品,所以在加上 i 物品的重量。
//添加 i 物品和不添加 i 物品的价值对比。
if(arr[i - 1][j] > (arr[i - 1][j - hight[i]] + money[i])) {
//如果不添加i物品的价值最大的话,那么当前的背包数量等于不添加物品的价值
arr[i][j] = arr[i - 1][j];
}else {
//如果添加 i 物品的价值大的话那么当前j背包数量的价值就等于添加i物品后的价值。
arr[i][j] = arr[i - 1][j - hight[i]] + money[i];
}
/*arr[i][j] = (arr[i - 1][j] > (arr[i - 1][j - money[i]] + hight[i]) ? arr[i - 1][j]
: arr[i - 1][j - money[i]] + hight[i]);*/
} else {
//如果当前背包装不下i物品那么当前背包价值等于上一个背包当前重量的价值。
arr[i][j] = arr[i - 1][j];
}
/**
* 输出一行背包
*/
//System.out.print(arr[i][j]+" ");
}
/**
* 控制台输出换行
*/
//System.out.println();
}
}
}
01背包问题java_01背包问题—Java代码相关推荐
- 0-1背包 java_0-1背包问题,java的动态规划如题,代码如下public
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 0-1背包问题,java的动态规划 如题,代码如下 public class dongtaiguihua01 { public static void m ...
- 0 1背包问题 java_0-1背包问题,java的动态规划如题,代码如下public
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 0-1背包问题,java的动态规划 如题,代码如下 public class dongtaiguihua01 { public static void m ...
- 01背包问题java_01背包问题 动态规划 java实现
日常吐槽,日常打代码,理论可以去看其他博客,只贴出代码,代码有注释 public static int Knapsack(int v[],int w[],int c,int n,int m[][]) ...
- 写java代码时的注意事项_从方法返回Java 8的可选项时的注意事项
写java代码时的注意事项 Java 8引入的Optional类一直是该语言版本引入的最具争议的功能之一. 尽管我喜欢这个新的Java类的东西比不喜欢的东西多,但在Java方法中将其用作return类 ...
- 01矩阵等比放大(Java代码、ACM格式)--2021.9.7百度笔试研发A卷
百度笔试题目:01矩阵等比放大(Java代码)–2021.9.7百度笔试研发A卷 一.题目详情: 第一行输入两个数,第一个数为矩阵的长和宽,第二个数为需要放大的倍数: 接下来输入的是矩形的内容. 示例 ...
- 基础贴吧java代码_原来你是这样的JAVA[01]-基础一瞥
1.Java是什么呢? Java不仅是一门语言,而且是一个完整的平台,有一个庞大的库,其中包含了很多可重用的代码和一个提供安全性.跨操作系统的可移植性以及自动垃圾收集等服务的执行环境. 2.JDK 和 ...
- 01 | Java代码是如何运行
Java 代码有很多种不同的运行方式.比如说可以在开发工具中运行,可以双击执行 jar 文件运行,也可以在命令行中运行,甚至可以在网页中运行.当然,这些执行方式都离不开 JRE,也就是 Java 运行 ...
- 经典背包问题3——背包问题求方案数 、背包问题求具体方案
经典背包问题3--背包问题求方案数 .背包问题求具体方案 1. 背包问题求方案数 2. 背包问题求具体方案 1. 背包问题求方案数 有 N 件物品和一个容量是 V的背包.每件物品只能使用一次. 第 i ...
- java代码调用python_Java调用Python
常见的java调用python脚本方式有两种,下面给大家介绍一下: 通过Jython.jar提供的类库实现 通过Runtime.getRuntime()开启进程来执行脚本文件 这两种方法我都尝试过,个 ...
最新文章
- GitLab设置中文
- R语言ggplot2可视化:在选定数据点周围添加三角形(Add Triangles Around Select Data Points)
- matlab中nc文件,MATLAB读取.nc文件
- LeetCode 题 - 88. 合并两个有序数组
- 修饰性形容词-big、good、high_35
- 安卓应用安全指南 5.5.1 处理隐私数据 示例代码
- 为什多很了学么营销识知依然赚不到钱?
- Android是如何绘制View的
- Linux下的编曲软件,在Linux下可用Wine运行编曲软件FL Studio,也可用LMMS替代
- 设置QQ空间评论回复权限,包括日志、相册、说说、留言板的评论回复和留言权限,限制名单成员无评论回复权限
- 方维P2P 二次开发
- python自动上传百度网盘_树莓派使用百度云盘自动上传存储监控照片
- 用switch语句根据消费金额计算折扣 (Java经典编程案例)
- 穿山甲别于传统广告联盟,造势创建新角色
- 关于我装黑苹果的那些事儿
- 6.26线下深度交流:数据如何驱动新零售升级?
- Java数据可视化 (JavaFX, Apache ECharts)
- carsim与simulink联合仿真-ABS(制动防抱死系统) 入门——详细步骤
- 诺基亚n1平板电脑刷机教程_诺基亚N1平板电脑做工如何?诺基亚N1拆机图解评测...
- mysql连接异常:The server time zone value '�й���ʱ��' is unrecognized or represents more than one time zo