一、问题

描述

给定 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代码相关推荐

  1. 0-1背包 java_0-1背包问题,java的动态规划如题,代码如下public

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 0-1背包问题,java的动态规划 如题,代码如下 public class dongtaiguihua01 { public static void m ...

  2. 0 1背包问题 java_0-1背包问题,java的动态规划如题,代码如下public

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 0-1背包问题,java的动态规划 如题,代码如下 public class dongtaiguihua01 { public static void m ...

  3. 01背包问题java_01背包问题 动态规划 java实现

    日常吐槽,日常打代码,理论可以去看其他博客,只贴出代码,代码有注释 public static int Knapsack(int v[],int w[],int c,int n,int m[][]) ...

  4. 写java代码时的注意事项_从方法返回Java 8的可选项时的注意事项

    写java代码时的注意事项 Java 8引入的Optional类一直是该语言版本引入的最具争议的功能之一. 尽管我喜欢这个新的Java类的东西比不喜欢的东西多,但在Java方法中将其用作return类 ...

  5. 01矩阵等比放大(Java代码、ACM格式)--2021.9.7百度笔试研发A卷

    百度笔试题目:01矩阵等比放大(Java代码)–2021.9.7百度笔试研发A卷 一.题目详情: 第一行输入两个数,第一个数为矩阵的长和宽,第二个数为需要放大的倍数: 接下来输入的是矩形的内容. 示例 ...

  6. 基础贴吧java代码_原来你是这样的JAVA[01]-基础一瞥

    1.Java是什么呢? Java不仅是一门语言,而且是一个完整的平台,有一个庞大的库,其中包含了很多可重用的代码和一个提供安全性.跨操作系统的可移植性以及自动垃圾收集等服务的执行环境. 2.JDK 和 ...

  7. 01 | Java代码是如何运行

    Java 代码有很多种不同的运行方式.比如说可以在开发工具中运行,可以双击执行 jar 文件运行,也可以在命令行中运行,甚至可以在网页中运行.当然,这些执行方式都离不开 JRE,也就是 Java 运行 ...

  8. 经典背包问题3——背包问题求方案数 、背包问题求具体方案

    经典背包问题3--背包问题求方案数 .背包问题求具体方案 1. 背包问题求方案数 2. 背包问题求具体方案 1. 背包问题求方案数 有 N 件物品和一个容量是 V的背包.每件物品只能使用一次. 第 i ...

  9. java代码调用python_Java调用Python

    常见的java调用python脚本方式有两种,下面给大家介绍一下: 通过Jython.jar提供的类库实现 通过Runtime.getRuntime()开启进程来执行脚本文件 这两种方法我都尝试过,个 ...

最新文章

  1. GitLab设置中文
  2. R语言ggplot2可视化:在选定数据点周围添加三角形(Add Triangles Around Select Data Points)
  3. matlab中nc文件,MATLAB读取.nc文件
  4. LeetCode 题 - 88. 合并两个有序数组
  5. 修饰性形容词-big、good、high_35
  6. 安卓应用安全指南 5.5.1 处理隐私数据 示例代码
  7. 为什‮多很了学么‬营销‮识知‬依然赚不到钱?
  8. Android是如何绘制View的
  9. Linux下的编曲软件,在Linux下可用Wine运行编曲软件FL Studio,也可用LMMS替代
  10. 设置QQ空间评论回复权限,包括日志、相册、说说、留言板的评论回复和留言权限,限制名单成员无评论回复权限
  11. 方维P2P  二次开发
  12. python自动上传百度网盘_树莓派使用百度云盘自动上传存储监控照片
  13. 用switch语句根据消费金额计算折扣 (Java经典编程案例)
  14. 穿山甲别于传统广告联盟,造势创建新角色
  15. 关于我装黑苹果的那些事儿
  16. 6.26线下深度交流:数据如何驱动新零售升级?
  17. Java数据可视化 (JavaFX, Apache ECharts)
  18. carsim与simulink联合仿真-ABS(制动防抱死系统) 入门——详细步骤
  19. 诺基亚n1平板电脑刷机教程_诺基亚N1平板电脑做工如何?诺基亚N1拆机图解评测...
  20. mysql连接异常:The server time zone value '�й���׼ʱ��' is unrecognized or represents more than one time zo

热门文章

  1. javaweb总结——孤傲苍狼
  2. struts2设置默认首页
  3. Java学习需要掌握的知识与技能有哪些?
  4. c#截取字符串后几位_C#字符串截取
  5. 10月24号,我们腾讯滨海大厦见!
  6. 使用UItraISO刻录系统
  7. 利用chrome检查网页
  8. 安卓开发者选项菜单里的动画选项都代表什么含义?
  9. dbutils mysql,DbUtils操作数据库
  10. 零基础搭建属于自己的网站--网页设计【学习笔记8】