当前位置: 首页 > news >正文

Leetcode-day31-01背包问题

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]);}
}

 

相关文章:

  • 《Programming from the Ground Up》阅读笔记:p103-p116
  • Linux内核定时器
  • Java--Zuul网关中的过滤器
  • AIGC深度学习教程:Transformer模型中的Position Embedding实现与应用
  • IO与进程
  • 通信系统收发原理冷知识
  • Datawhale X 李宏毅苹果书 AI夏令营(深度学习入门)taks2
  • 跟《经济学人》学英文:2024年08月24日这期 What to make of America’s topsy-turvy economy
  • centos7安装Kafka单节点环境部署三-安装Logstash
  • MURF860AC-ASEMI智能AI专用MURF860AC
  • 虚幻游戏开发| 编辑器内正常运行但打包出错
  • 高级java每日一道面试题-2024年8月23日-框架篇[SpringBoot篇]-什么是JavaConfig?
  • ACM模式下算法题输入输出攻略【C++】
  • Adobe Lightroom Classic (LRC) 软件下载安装和软件使用介绍
  • 【Java】/* 与树有关的一些概念 */
  • [rust! #004] [译] Rust 的内置 Traits, 使用场景, 方式, 和原因
  • 【css3】浏览器内核及其兼容性
  • Android Studio:GIT提交项目到远程仓库
  • Android单元测试 - 几个重要问题
  • android高仿小视频、应用锁、3种存储库、QQ小红点动画、仿支付宝图表等源码...
  • bearychat的java client
  • codis proxy处理流程
  • EventListener原理
  • FastReport在线报表设计器工作原理
  • HTTP传输编码增加了传输量,只为解决这一个问题 | 实用 HTTP
  • IDEA常用插件整理
  • Iterator 和 for...of 循环
  • js递归,无限分级树形折叠菜单
  • 从零开始学习部署
  • 分布式任务队列Celery
  • 嵌入式文件系统
  • 区块链将重新定义世界
  • 如何用vue打造一个移动端音乐播放器
  • 试着探索高并发下的系统架构面貌
  • 手机app有了短信验证码还有没必要有图片验证码?
  • 网络应用优化——时延与带宽
  • 学习JavaScript数据结构与算法 — 树
  • nb
  • 3月7日云栖精选夜读 | RSA 2019安全大会:企业资产管理成行业新风向标,云上安全占绝对优势 ...
  • shell使用lftp连接ftp和sftp,并可以指定私钥
  • ​520就是要宠粉,你的心头书我买单
  • ​比特币大跌的 2 个原因
  • ​批处理文件中的errorlevel用法
  • # centos7下FFmpeg环境部署记录
  • ### RabbitMQ五种工作模式:
  • #基础#使用Jupyter进行Notebook的转换 .ipynb文件导出为.md文件
  • $refs 、$nextTic、动态组件、name的使用
  • ( )的作用是将计算机中的信息传送给用户,计算机应用基础 吉大15春学期《计算机应用基础》在线作业二及答案...
  • (1/2) 为了理解 UWP 的启动流程,我从零开始创建了一个 UWP 程序
  • (20050108)又读《平凡的世界》
  • (NO.00004)iOS实现打砖块游戏(九):游戏中小球与反弹棒的碰撞
  • (机器学习的矩阵)(向量、矩阵与多元线性回归)
  • (六)vue-router+UI组件库
  • (免费领源码)Java#Springboot#mysql农产品销售管理系统47627-计算机毕业设计项目选题推荐
  • (一)u-boot-nand.bin的下载