小明的背包——01背包问题

经典版

题目链接:1.小明的背包1 - 蓝桥云课 (lanqiao.cn)

01背包问题中,每种物品只有两种状态,即拿或不拿。设状态dp[i][j]=max(dp[i-1][j],dp[i-1][j-w]+v);如果不拿物品i,那么最大价值就是dp[i-1][j],如果拿了就是从体积j-v转移过来,体积会变大w,价值增加v,最后输出dp[N][V]。

package lanqiao;import java.util.Scanner;/*** 2024/3/13* 背包容量为V,商场一共有N件物品,第i件物品的体积为wi,价值为vi* 求不超过体积的情况下所获得的最大价值为多少*/
public class lanqiao1174_小明的背包1 {public static void main(String[] args) {Scanner scan=new Scanner(System.in);int N=scan.nextInt();//物品个数int V=scan.nextInt();//背包容量int[] w=new int[N];//物品体积int[] v=new int[N];//物品价值for (int i=0;i<N;i++){//输入体积和价值w[i]=scan.nextInt();v[i]=scan.nextInt();}int[][] dp=new int[N+1][V+1];for (int i=1;i<=N;i++){for (int j=1;j<=V;j++){dp[i][j]=dp[i-1][j];if (j>=w[i-1]) {dp[i][j] = Math.max(dp[i][j], dp[i - 1][j - w[i - 1]] + v[i - 1]);}}}System.out.println("最大价值为:"+dp[N][V]);}
}
5 20
1 6
2 5
3 8
5 15
3 3
最大价值为:37进程已结束,退出代码为 0

升阶版

01背包的优化

        首先有dp[i][j]=dp[i-1][j],相当于将dp[i-1]复制给dp[i],然后dp[i][j]=max(dp[i-1][j],dp[i-1][j-w]+v),每次下标都是从小转移到大,由此可以将第一维度优化掉,直接设置一个一维数组,每次更新都从后往前更新,即变为:dp[j]=max(dp[j],dp[j-w]+v),dp[j]表示此时物品总重量为j的情况下的最大价值

题目链接:1.背包与魔法 - 蓝桥云课 (lanqiao.cn)

设状态dp[i][j]表示物品总重量为i,且使用了j次魔法的情况下的最大值。

对于每个物品有三种选择:不选、选但不使用魔法、选且使用魔法

dp[j][0] = Math.max(dp[j][0], dp[j - w][0] + v);
dp[j][1] = Math.max(dp[j - w - K][0] + v * 2, dp[j][1]);

其中,dp[j][1]==dp[j][0];

最后输出

Math.max(dp[M][0], dp[M][1])
package lanqiao;import java.util.Scanner;/*** 2024/3/13* 小蓝有N件物品,其中第i件重量是Wi,价值是Vi。他有一个背包,最大承重是M* 求最多能装总价值多少的wupin* 其中,小蓝可以使用一个魔法,仅一次,将一件物品的重量增加K,同时价值翻倍,当然也可以不使用魔法*/
public class lanqiao2223_背包与魔法 {public static void main(String[] args) {Scanner scan = new Scanner(System.in);int N = scan.nextInt();//物品数量int M = scan.nextInt();//背包体积int K = scan.nextInt();//魔法增重int[] w = new int[N];int[] v = new int[N];for (int i = 0; i < N; i++) {w[i] = scan.nextInt();v[i] = scan.nextInt();}int[][] dp = new int[M + 1][2];//定义一个二维数组,一个表示未用魔法的,一个表示使用魔法的,dp[ ][0]   dp[ ][1]for (int i = 1; i <= N; i++) {for (int j = M; j >= 0; j--) {if (j >= w[i - 1]) {dp[j][0] = Math.max(dp[j][0], dp[j - w[i - 1]][0] + v[i - 1]);//未使用魔法的情况dp[j][1] = Math.max(dp[j][1], dp[j - w[i - 1]][1] + v[i - 1]);//通过将为使用魔法的数值复制存储,方便进行下面使用魔法情况的运算}if (j >= w[i - 1] + K) {//考虑使用魔法情况(上述将同一个结果分别存储在不同维度,也是为了此处计算不影响结果)dp[j][1] = Math.max(dp[j - w[i - 1] - K][0] + v[i - 1] * 2, dp[j][1]);}}}System.out.println("最大价值为:" + Math.max(dp[M][0], dp[M][1]));//比较使用魔法和未使用魔法的情况,输出较大的结果}
}
3 10 3
5 10
4 9
3 8
最大价值为:26进程已结束,退出代码为 0

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/743569.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

探索Java高并发编程之道:理论与实践

&#x1f482; 个人网站:【 海拥】【神级代码资源网站】【办公神器】&#x1f91f; 基于Web端打造的&#xff1a;&#x1f449;轻量化工具创作平台&#x1f485; 想寻找共同学习交流的小伙伴&#xff0c;请点击【全栈技术交流群】 简介 随着互联网和信息技术的快速发展&#x…

【2024 R1 版本更新】Ansys Fluent(上)

​​Ansys2024R1来了&#xff0c;小宇赶紧将新功能给大家汇报一下。GPU求解器功能势头最强&#xff0c;pyFluent又开始迭代了&#xff0c;CPU模型中又更新了很多功能&#xff0c;fluent meshing中的thin volume mesh功能也来了。

libusb_Qt使用

Libusb libusb_github 建议直接下载库&#xff0c;编译好麻烦 QT调用 .pro文件添加&#xff1a; win32: LIBS -L$$PWD/LIB/libusb/x64/ -llibusb-1.0.cpp调用即可 #include "LIB/libusb/libusb.h" void class_name::fun(){/* 1. */libusb_init(NULL);/**/str…

mockjs学习

1.前言 最近面试发现之前团队协同合作的项目没有mock数据难以向面试官直接展示&#xff0c;所以迟到得来速学一下mockjs。 参考视频&#xff1a;mockJs 妈妈再也不用担心我没有后端接口啦_哔哩哔哩_bilibili 一开始查阅了一些资料&#xff0c;先是看了下EasyMock&#xff0c…

环保企业应适应行业发展趋势,不断创新和提升竞争力|中联环保圈

《2023年行业评述及2024年发展展望》一文&#xff0c;由中国环保产业协会撰写&#xff0c;全面审视了过去一年我国生态环保产业的发展状况&#xff0c;并对新的一年发展趋势进行了深度预测。该报告以行业主要政策标准为基础&#xff0c;结合报告以及新冠疫情防控转段后的经济恢…

Cocos2dx-lua ScrollView[二]进阶篇

一.概述 本文缩写说明:sv = ScrollView, item代表ScrollView的一个子节点 如果对sv熟系程度还不够,请阅读基础篇: Cocos2dx-lua ScrollView[一]基础篇-CSDN博客 本文介绍sv的一种封装类库,来实现快速创建sv,有如下几个优点: 1.item的位置通过参数控制,提高开发效率…

使用Java自带的VisualVM监控远程服务器部署在Docker容器中的Java项目并使用Mat在线工具排查服务器内存泄露或内存溢出的原因

事情是这样的&#xff0c;我们项目最近应业主的要求迁移到了新的服务器&#xff0c;起初一切正常&#xff0c;部署、上线、测试都没有问题&#xff0c;项目大概运行了一周的工作日时间都没出现问题&#xff0c;直到周六那天&#xff0c;项目经理打电话过来说服务器崩了&#xf…

鼠标不动了怎么办?4招帮你解决问题!

“我在使用鼠标时&#xff0c;用着用着鼠标就动不了了&#xff0c;这是为什么呢&#xff1f;怎么才能让鼠标恢复正常呢&#xff1f;” 鼠标作为电脑使用中最常用的输入设备之一&#xff0c;其正常运行对于我们的工作效率至关重要。然而&#xff0c;有时我们可能会遇到鼠标突然不…

深入学习React开发:从基础到实战

&#x1f482; 个人网站:【 海拥】【神级代码资源网站】【办公神器】&#x1f91f; 基于Web端打造的&#xff1a;&#x1f449;轻量化工具创作平台&#x1f485; 想寻找共同学习交流的小伙伴&#xff0c;请点击【全栈技术交流群】 引言 React是一款流行的JavaScript库&#xf…

C#重新认识笔记_ FixUpdate + Update

C#重新认识笔记_ FixUpdate Update Update: 刷新频率不一致,非物理对象的移动&#xff0c;简单的刷新可用&#xff0c; FixedUpdate: 刷新频率一致,按照固定频率刷新&#xff0c;一般调用FixedUpdate之后&#xff0c;会立即进入必要的物理计算中,因此&#xff0c;任何影响刚…

【CSP试题回顾】201803-1-跳一跳

CSP-201803-1-跳一跳 解题代码 #include <iostream> using namespace std;int score, s, last_s -1;int main() {while (true){cin >> s;if (s 0) break;else if (s 1) {score s;last_s s;}else if (s 2) {if (last_s>2){score last_s;last_s 2;}else…

Python 界面逻辑分离示例

本示例使用的发卡设备&#xff1a;https://item.taobao.com/item.htm?id615391857885&spma1z10.5-c.w4002-21818769070.11.6cc85700Robi3x 一、Python 安装PyQt5&#xff0c;运行 Qt Designer 新建窗体文件&#xff0c;在窗体中拖放控件 完成界面设计&#xff0c;保存为…

克隆图00

题目链接 克隆图 题目描述 注意点 节点数不超过100每个节点值 Node.val 都是唯一的&#xff0c;1 < Node.val < 100无向图是一个简单图&#xff0c;这意味着图中没有重复的边&#xff0c;也没有自环图是连通图&#xff0c;可以从给定节点访问到所有节点 解答思路 本…

活动图高阶讲解-03

1 00:00:00,000 --> 00:00:06,260 刚才我们讲了活动图的历史 2 00:00:06,260 --> 00:00:11,460 那我们来看这个活动图 3 00:00:11,460 --> 00:00:15,260 如果用来建模的话怎么用 4 00:00:15,260 --> 00:00:20,100 按照我们前面讲的软件方法的工作流 5 00:00:20…

【网络安全】手机不幸被远程监控,该如何破解,如何预防?

手机如果不幸被远程监控了&#xff0c;用三招就可以轻松破解&#xff0c;再用三招可以防范于未然。 三招可破解可解除手机被远程监控 1、恢复出厂设置 这一招是手机解决软件故障和系统故障的终极大招。只要点了恢复出厂设置&#xff0c;你手机里后装的各种APP全部将灰飞烟灭…

STM32中断和外部中断

NVIC&#xff1a;嵌套中断向量控制器&#xff1a;用于统一分配中断优先级和管理中断 响应式优先级&#xff1a;也可以称为插队式优先级哪个优先级高优先处理哪个 抢占式优先级&#xff1a;优先级高的可以优先被处理&#xff0c;相当于CPU可以暂时中断当前处理的程序&#xff0c…

Python算法(列表排序)

一。冒泡排序&#xff1a; 列表每两个相邻的数&#xff0c;如果前面比后面大&#xff0c;则交换这两个数 一趟排序完成后&#xff0c;则无序区减少一个数&#xff0c;有序区增加一个数 时间复杂度&#xff1a;O(n*n) 优化后&#xff1a;已经排序好后立马停止&#xff0c;加快…

【力扣 - 合并区间】

题目描述 以数组 intervals 表示若干个区间的集合&#xff0c;其中单个区间为 intervals[i] [start_i, end_i] 。请你合并所有重叠的区间&#xff0c;并返回 一个不重叠的区间数组&#xff0c;该数组需恰好覆盖输入中的所有区间 。 示例 1&#xff1a; 输入&#xff1a;int…

环形缓冲区在stm32上的使用

目录 环形缓冲区在stm32上的使用前言实验目的环形缓冲区的定义和初始化写入数据到环形缓冲区从环形缓冲区读取数据实验结果本文中的实践工程 环形缓冲区在stm32上的使用 本文目标&#xff1a;环形缓冲区在stm32上的使用 按照本文的描述&#xff0c;应该可以跑通实验并举一反三…

Day31:安全开发-JS应用WebPack打包器第三方库JQuery安装使用安全检测

目录 打包器-WebPack-使用&安全 第三方库-JQuery-使用&安全 思维导图 JS知识点&#xff1a; 功能&#xff1a;登录验证&#xff0c;文件操作&#xff0c;SQL操作&#xff0c;云应用接入&#xff0c;框架开发&#xff0c;打包器使用等 技术&#xff1a;原生开发&…