动态规划——背包问题升级

文章出处:极客时间《数据结构和算法之美》-作者:王争。该系列文章是本人的学习笔记。

背包能够承受的总重量一定w,每个物品的总量不同int[] weight表示,每个物品的价值不同用int[] values表示。怎么放才能让背包中物品不超过最大重量,而且价值最大。

这道题目在0-1背包问题上升级了,多了一个价值这个维度。我们就在上一版本基础上调整。state存放当前状态下的最大价值。

	public int knapsnackV3(int[] weight,int[] value, int n,int w){int[][] state = new int[n][w+1];int maxValue = -1;for(int i=0;i<n;i++){Arrays.fill(state[i],-1);}state[0][0] = 0;if(weight[0]<w){state[0][weight[0]] = value[0];}for(int i=1;i<n;i++){//不放入第i物品for(int j=0;j<=w;j++){if(state[i-1][j]>-1){state[i][j] = state[i-1][j];}}//放入第i物品for(int j=0;j<=w-weight[i];j++){if(state[i-1][j]>-1){int v = state[i-1][j]+value[i];if(v>state[i][j+weight[i]]){state[i][j+weight[i]] = v;}}}}for(int j=w;j>=0;j--){if(state[n-1][j]>-1){maxValue = Math.max(maxValue,state[n-1][j]);}}return maxValue;}

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

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

相关文章

MacOS安装过程需要注意的几个问题

如果是单系统, 会简单很多, 直接按照安装教程来走就行, 一步一步来就很简单. 多系统安装, 则需要注意硬盘分区表方案. MBR 和 GUIP(简称GPT). Mac系统无法原生安装于MBR硬盘上,引导方案应选择UEFI/GPT 方案要设置磁盘分区表为GUIP.(使用DiskGenius等磁盘管理工具, 可以无损, 但…

spring学习(10):创建项目(自动装配)

首先创建项目 pom.xml的配置文件 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://mav…

[密码学基础][每个信息安全博士生应该知道的52件事][Bristol Cryptography][第21篇]CRT算法如何提高RSA的性能?

CRT加速RSA&#xff1a;https://www.di-mgt.com.au/crt_rsa.html 转载链接&#xff1a;https://www.cnblogs.com/zhuowangy2k/p/12245513.html

javascript优先级注意点

javascript 优先级 注意一下 && 和 号之间的优先级关系 请首先看如下代码, 判断下 && 和 的优先级 const emptyObj {name: "kylin"}; if (emptyObj && emptyObj.name "kylin") {console.log("my name is kylin"); }…

动态规划——最长递增子序列

题目 我们有一个数字序列包含 n 个不同的数字&#xff0c;如何求出这个序列中的最长递增子序列长度&#xff1f;比如 2, 9, 3, 6, 5, 1, 7 这样一组数字序列&#xff0c;它的最长递增子序列就是 2, 3, 5, 7&#xff0c;所以最长递增子序列的长度是 4。 回溯法 数组长度为n&a…

spring学习(11):使用配置类

CompactDisc类 package soundSystem;import org.springframework.stereotype.Component;Component public class CompactDisc {public CompactDisc() {super();System.out.println("compactdisc无参构造方法");}public void play(){System.out.println("正在播…

[密码学基础][每个信息安全博士生应该知道的52件事][Bristol Cryptography][第22篇]如何用蒙哥马利算法表示一个数字和多个相乘的数字

这是一系列博客文章中最新的一篇&#xff0c;该文章列举了“每个博士生在做密码学时应该知道的52件事”:一系列问题的汇编是为了让博士生们在第一年结束时知道些什么。 安全和效率 密码学的目标是设计高度安全的密码学协议,但是同时这些协议也应该被有效率的实现.这样就可以一…

动态规划——双11既可以薅羊毛还能花钱最少

淘宝的“双十一”购物节有各种促销活动&#xff0c;比如“满 200 元减 50 元”。假设你的购物车中有 n 个&#xff08;n>100&#xff09;想买的商品&#xff0c;希望从里面选几个&#xff0c;在凑够满减条件的前提下&#xff0c;让选出来的商品价格总和最大程度地接近满减条…

spring学习(12):使用junit4进行单元测试

pom.xml <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.org/POM/4.0.0 …

ELK电子书籍

Elasticsearch in Action(英文版).pdfElasticsearch实战 in action(中文版).pdfElasticsearch技术解析与实战.pdfElasticsearch大数据搜索引擎.pdfELK Stack权威指南 第2版.pdf深入理解ElasticSearch.pdfElasticsearch服务器开发&#xff08;第2版&#xff09;.pdf下载地址:链接…

[密码学基础][每个信息安全博士生应该知道的52件事][Bristol Cryptography][第23篇]写一个实现蒙哥马利算法的C程序

这是一系列博客文章中最新的一篇&#xff0c;该文章列举了“每个博士生在做密码学时应该知道的52件事”:一系列问题的汇编是为了让博士生们在第一年结束时知道些什么。 这次博客我将通过对蒙哥马利算法的一个实际的实现&#xff0c;来补充我们上周蒙哥马利算法的理论方面。这个…

spring学习(13):使用junit4进行单元测试续

加入spring test.jar包 pom.xml <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven…

动态规划几种状态剪裁比较

我们前面看过了0-1背包问题&#xff0c;矩阵最短路径长度问题和莱文斯坦最短 编辑距离问题。 在三个问题的状态树中。 0-1背包问题&#xff1a;用(i,cw)表示状态。i 表示要将要处理第i个物品&#xff0c;cw表示当前总重量。因为(i,cw)有重复的&#xff0c;所以使用动态规划。 …

《java程序员修炼之道》pdf书籍

链接&#xff1a;https://pan.baidu.com/s/1bbsTPCpUNI9klh40-8Be7w 提取码&#xff1a;pc57 转载于:https://www.cnblogs.com/pyweb/p/10995145.html

[密码学基础][每个信息安全博士生应该知道的52件事][Bristol Cryptography][第24篇]描述一个二进制m组的滑动窗口指数算法

这是一系列博客文章中最新的一篇&#xff0c;该文章列举了“每个博士生在做密码学时应该知道的52件事”:一系列问题的汇编是为了让博士生们在第一年结束时知道些什么。 二进制算法 二进制模幂算法和传统的求幂的二次方方法非常像。实际上&#xff0c;唯一的不同就是我们把N表示…

第五十八期:从0到1 手把手教你建一个区块链

近期的区块链重回热点&#xff0c;如果你想深入了解区块链&#xff0c;那就来看一下本文&#xff0c;手把手教你构建一个自己的区块链。 作者&#xff1a;Captain编译 近期的区块链重回热点&#xff0c;如果你想深入了解区块链&#xff0c;那就来看一下本文&#xff0c;手把手…

动态规划——硬币找零思路

找零的两种问题 硬币找零问题&#xff0c;有两种。一种用贪心解决&#xff0c;一种用动态规划解决。 问题1&#xff1a;假设我们有 v1&#xff0c;v2&#xff0c;……&#xff0c;vn&#xff08;单位是元&#xff09;这些币值的硬币&#xff0c;它们的张数分别是 c1、c2、…, …

【线性dp】【决策优化】CH5E02

题面 给你一个n*m的矩阵&#xff0c;要求每一行选择一个数&#xff0c;并且第i行选择的位置a[i]一定要大于第i-1行选择的位置a[i-1]&#xff0c;求选取的数的总和为多少&#xff0c;输出一组字典序最小的a[1]到a[n]。1<n<m<100 链接&#xff1a;http://contest-hunter…

[密码学基础][每个信息安全博士生应该知道的52件事][Bristol Cryptography][第25篇]使用特殊的素数定义GF(p)和GF(2^n)的方法

这是一系列博客文章中最新的一篇&#xff0c;该文章列举了“每个博士生在做密码学时应该知道的52件事”:一系列问题的汇编是为了让博士生们在第一年结束时知道些什么。 当实现密码学方案时&#xff0c;一个最频繁调用的操作就是模运算。不幸的是&#xff0c;尽管模块化的使用非…

第五十九期:如何在Windows 10中执行Windows Defender离线扫描?

如果你使用Windows并经常上网浏览&#xff0c;强烈建议使用防病毒/安全保护软件。Windows 10随带一款名为Windows Defender/Security的内置防病毒保护工具&#xff0c;在过去几年不断成熟&#xff0c;已成为一种优秀的安全解决方案。 作者&#xff1a;布加迪编译 如果你使用Wi…