Leetcode-day31-01背包问题

server/2025/1/12 17:55:16/

46. 携带研究材料

1.dp数组代表的是什么? 这里的dp数组是一个二维数组,dp[i][j]是从前i个物品中任选放入容量j内的最大价值。

2.递推公式。

  • 不放物品i:由dp[i - 1][j]推出,即背包容量为j,里面不放物品i的最大价值,此时dp[i][j]就是dp[i - 1][j]。

  • 放物品i:由dp[i - 1][j - weight[i]]推出,dp[i - 1][j - weight[i]] 为背包容量为j - weight[i]的时候不放物品i的最大价值,那么dp[i - 1][j - weight[i]] + value[i] (物品i的价值),就是背包放物品i得到的最大价值

递归公式: dp[i][j] = max(dp[i - 1][j], dp[i - 1][j - weight[i]] + value[i]);

3.dp数组初始化:dp数组的第一列,也就是容量为0,此时都是0。dp数组的第一行,也就是把第0个物品放入,此时前面都是0(放不进去的时候),直到能放进去了变为value[i]。

4.遍历方向,外层是背包或者外层是物品都可以

5.打印dp数组,最右下角的元素

import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);int n = scanner.nextInt();int bagweight = scanner.nextInt();int[] weight = new int[n];int[] value = new int[n];for (int i = 0; i < n; ++i) {weight[i] = scanner.nextInt();}for (int j = 0; j < n; ++j) {value[j] = scanner.nextInt();}int[][] dp = new int[n][bagweight + 1];for (int j = weight[0]; j <= bagweight; j++) {dp[0][j] = value[0];}for (int i = 1; i < n; i++) {for (int j = 0; j <= bagweight; j++) {if (j < weight[i]) {dp[i][j] = dp[i - 1][j];} else {dp[i][j] = Math.max(dp[i - 1][j], dp[i - 1][j - weight[i]] + value[i]);}}}System.out.println(dp[n - 1][bagweight]);}
}

 


http://www.ppmy.cn/server/105245.html

相关文章

RocketMQ 如何保证消息不丢失?

RocketMQ 的消息想要确保不丢失&#xff0c;需要生产者、消费者以及 Broker 的共同努力&#xff0c;缺一不可。 生产者&#xff08;Producer&#xff09; 1、发送方式&#xff1a;选择同步发送 同步发送&#xff1a;发送消息后&#xff0c;需要阻塞等待 Broker 确认收到消息…

(七)Flink Watermark

Flink 的 Watermark 是用来标识数据流中的一个时间点。Watermark 的设计是为了解决乱序数据处理的问题,尤其是涉及到多个分区的 Kafka 消费者时。在 Watermark 的作用下,即使某些数据出现了延迟到达的情况,也不会导致整个处理流程的中断。此外,Watermark 还能防止过期的数据…

C++学习, 变量作用域

从广义上看&#xff0c;有三个地方&#xff0c;可以声明变量&#xff1a; 在函数或块中声明的变量&#xff0c;为局部变量。 在函数参数定义的变量&#xff0c;为形式参数。 在所有函数之外的变量&#xff0c;为全局变量。 局部变量 (Local Variables) 在函数或块内声明的变…

开源免费的仪表盘设计工具DashBoard

DashBoard 是一个基于多种技术栈的仪表盘设计器&#xff0c;它集成了SpringBoot、MyBatisPlus、ElementUI、G2Plot、Echarts等技术&#xff0c;为用户提供了强大的仪表盘设计、管理和预览能力。 开源地址&#xff1a;DashBoard: &#x1f525;基于VueElementUIG2PlotEcharts的…

一拖二快充线市场需求 - LDR6020

一拖二快充线市场需求与LDR6020应用快充线市场推广 随着科技的飞速发展&#xff0c;智能设备已成为我们日常生活中不可或缺的一部分。从智能手机到平板电脑&#xff0c;再到笔记本电脑&#xff0c;这些设备极大地丰富了我们的生活方式&#xff0c;但同时也带来了一个普遍的问题…

Java 4.2 - MySQL

MySQL 基础 关系型数据库 关系型数据库就是建立在关系模型上的数据库。关系模型描述了实体属性以及实体和实体之间的关系。 在关系型数据库中&#xff0c;我们的数据都被存放在了各种表中&#xff08;比如用户表&#xff09;&#xff0c;表中的每一行存放着一条数据。 常见…

算法日记day 46(单调栈之下一个更大元素|柱状图中最大图形)

一、下一个更大元素1 题目&#xff1a; nums1 中数字 x 的 下一个更大元素 是指 x 在 nums2 中对应位置 右侧 的 第一个 比 x 大的元素。 给你两个 没有重复元素 的数组 nums1 和 nums2 &#xff0c;下标从 0 开始计数&#xff0c;其中nums1 是 nums2 的子集。 对于每个 0 …

二叉树刷题(1)

二叉树题目讲解&#xff08;1&#xff09; 一、构建二叉树并且遍历&#xff08;1&#xff09;思路&#xff08;2&#xff09;代码 二、对称二叉树1、思路2、代码 三、相同的树1、思路2、代码 四、单值二叉树1、思路2、代码 五、另一棵树的子树1、思路2、代码 一、构建二叉树并且…