算法学习——动态规划 例题:背包问题(java)

【算法】动态规划-背包问题   动态规划就是将问题划分为子问题,通过子问题的最优解得到原问题的最优解。动态规划把每个求解过程的子问题记录下来,下次碰到同样的子问题可以直接使用之前的结果。下面学习一类经典的背包问题。 1.01背包问题 问题是这样的:n 件物品,每个重量 w[i],价值 c[i] 。背包容量 V。问如何使得背包内物品总价值最大。每种物品只有一件。 定义 dp[i][j] 表示前 i 件物品装入容量 j 的背包的价值,那么: dp[i][j] = Math.max( dp[i-1][j], // 不放第 i 件物品 阅读详情

题目:

一个背包有一定的承重W,用N件物品,每件都有自己的价值,记录在数组V中, 也都有自己的重量,记录在数组W中,每件物品只能选择要装入的背包还是不装入背包 , 要求在不超过背包承重的前提下选出物品的总价值最大

动态规划思想:假设物品从1到N,一件一件物品考虑是否加入背包
递推关系式:     1) j<w(i) V(i,j)=V(i-1,j)     2) j>=w(i) V(i,j)=max{ V(i-1,j),V(i-1,j-w(i))+v(i) }

public class DTGH_Backpack {
    public int backpack(int bw,int[] v,int[] w) {
        int[][] dp=new int[v.length][bw+1];
        for (int i = 0; i <dp[0].length ; i++) {
            if (w[0]<=i){
                for (int j = i; j <dp[0].length ; j++) {
                    dp[0][j]=v[0];
                }
                break;
            }
        }
        for (int i = 1; i <dp.length ; i++) {
            for (int j = 1; j <dp[0].length ; j++) {
                if (j>=w[i]) {
                    dp[i][j] = Math.max(dp[i - 1][j], dp[i - 1][j-w[i]]+v[i]);
                }else {
                    dp[i][j]=dp[i - 1][j];
                }
            }
        }
        return dp[dp.length-1][dp[0].length-1];

    }

    public static void main(String[] args) {
        DTGH_Backpack a=new DTGH_Backpack();
        int[] v={100,1,2};
        int[] w={71,69,1};
        System.out.println(a.backpack(71,v,w));
    }
}

 

Java五大常用算法 为初学者而著! Java基础是初学者的起点,是帮助你从小白入门到精通必学基础课程! B站最新录制Java300集>>> 适合准备入行开发的零基础员学习Java,基于最新JDK13、IDEA平台讲解的,视频中穿插多个实战项目。每一个知识点都讲解的通俗易懂,由浅入深。不仅适用于零基础的初学者,有经验的程序员也可做巩固学习。 配套学习:​2022年Java300集最新录制课程上线了>>>​ 算法一:分治法 基本概念 1.把一个复杂的问题分成两个或更多... 阅读详情

相关推荐

动态规划——01背包问题(Java实现)

动态规划算法: 动态规划算法介绍: 动态规划算法的核心思想是:将大问题划分为小问题进行解决,从而一步步获得最优解的处理算法。 动态规划算法的基本思想是:将待求解的问题分解成若干子问题,先求解子问题,然后从这些子问题的解得到原问题的解。 适合用于动态规划的求解的问题,经分解得到子问题往往不是互相独立的。(即下一个子阶段的求解是建立在上一个子阶段的解的基础上,进行进一步的求解) 动态规划可以通过填表的方式来逐步推进,得到最优解。 动态规划算法最佳实践:背包问题 有一个背包,容量为4磅,现有如下物品 :

nswdiphone6的博客 6325

【牛客BAT算法】9.动态规划

什么是动态规划方法? 1.其本质是利用申请的空间来记录每一个暴力搜索的计算结果,下次要用结果的时候直接使用,而不再进行重复的递归过程 2.动态规划规定每一种递归状态的计算顺序,依次进行计算 动态规划方法的关键点: 1.最优化原理,也就是最优子结构性质。 指的是一个最优化策略具有这样的性质,不论过去状态和决策如何,对前面的决策所形成的状态而言,余下的诸决策必须构成最优策略。 简单说就是一个最优化策略的子策略总是最优的,如果一个问题满足最优化原理,就称其具有最优子结构性质。 2.无后效性。指的

400

动态规划DP——01背包问题

01 背包问题   今天在算法课上讲解了动态规划算法,其中讲到了01背包问题。这是一种典型的动态规划问题,于是下课之后我使用java进行了相对应的代码实现。动态规划求解具有以下的性质: 1.最优子结构性质:最优解包含了其子问题的最优解,不是合并所有子问题的解,而是找最优的一条解线路,选择部分子最优解来达到最终的最优解。 2.子问题重叠性质:先计算子问题的解,再由子问题的解去构造问题的解(由于子问题...

qq_30091249的博客 4971

动态规划6:01背包问题

动态规划6:01背包问题

小菜鸟也想飞的博客 996

Java使用动态规划算法思想解决01背包问题

最优性原理体现为问题的最优子结构特性,对于一个问题,如果能从较小规模的子问题的最优解求得较大规模同类子问题的最优解,最终得到给定问题的最优解,也就是问题的最优解中所包含的子问题的最优解,这种性质被称为最优子结构性质。最优子结构特性使得在从较小问题的解构造较大问题的解时,只需考虑子问题的最优解,然后以自底向上的方式递归地从子问题的最优解逐步构造出整个问题的最优解,它保证了原问题的最优解可以通过求解子问题的最优解来获得,最优子结构的特性是动态规划算法求解问题的必要条件。...

AS011x的博客 1296

SVPWM分析、各个扇区详细计算以及Matlab仿真

SVPWM分析以及各个扇区详细计算以及Matlab仿真说明目的两电平逆变器拓扑空间矢量扇区判断扇区内如何发波?矢量作用时间计算矢量切换时间的计算Simulink仿真/基于Matlab-R2014a版本 说明 第一次发文章,不太会用Markdown,word编辑的公式复制过来有些是乱码,因此都贴图了。 另外,本文公式和图片比较多,编辑工作量比较大,比较辛苦,转载的话,请注明出处,谢谢。 目的 由于在...

michaelf的博客 12万+

OJ刷题--[算法课动态规划]背包问题(C++完整代码)

OJ刷题--[算法课动态规划]背包问题(C++完整代码)

qq_44258878的博客 666

使用在UE5中使用AirSim插件Eigen库头文件引用报错,出现报错的解决方式

如图所示,用红线圈出的两条头文件引用会报错,提示无法找到他们,但是可以发现的是,他们的路径书写是没有问题的。在终端中运行时候,会出现如下的报错。

GFCLJY的博客 1006

算法 动态规划

1.1 array代表数组,数组中的数是正数,代表钱数,每种面值的货币可以使任意张,给定一aim代表要找的钱数,求换钱有多少种方法。比如:arr={5,10,25,1},aim=1000 暴力搜索:一般使用暴力递归 记忆搜索:将每次递归的结果放在hashmap中,下次递归的时候去hash表中查找结果,有,使用记忆的结果,没有则再进行递归。记忆搜索不规定计算的顺序。 经典的动态规划方法:动态规划规定...

初心魏的博客 322

大疆Livox Mid-70雷达的使用

一、前期准备 (一)、使用Livox Viewer测试雷达 1、设置静态IP sudo ifconfig enx081f7152092a 192.168.1.50 查看IP是否设置成功 lacyexsale@lacyexsale-KLV-WX9:~$ ifconfig enx081f7152092a Link encap:以太网 硬件地址 08:1f:71:52:09:2a inet 地址:192.168.1.50 广播:192.168.1.255 掩码:255.255.25

LacyExsale的博客 1万+

RS485/CAN总线防护电路设计:TVS选型与ESD防护实战解析

本文深入解析了RS485与CAN总线防护电路设计中的TVS选型与ESD防护实战技巧。针对工业现场常见的静电放电、浪涌等干扰,文章详细阐述了TVS管关键参数的选择、多级防护体系的构建,并特别强调了在隔离电路设计中地回路处理的重要性,帮助工程师设计出更可靠的通信接口。

metaverse5vr的博客 386

动态规划之背包问题——01背包

文章目录一、01背包问题二、二维dp数组解决01背包问题1. 确定dp数组以及下标的含义2. 确定递推公式3. dp数组初始化4. 确定遍历顺序5. 举例推导dp数组三、一维dp数组解决01背包问题1. 确定dp数组以及下标的含义2. 一维dp数组的递推公式3. 一维dp数组如何初始化4. 一维dp数组遍历顺序5.举例推导dp数组四、leetcode例题讲解01背包问题416. 分割等和子集1049. 最后一块石头的重量 II494. 目标和474. 一和零 背包问题中我们常见的就是01背包和完全背包。在l

小朱小朱绝不认输的博客 1万+

使用VNA(Vector Network Analyzer)对S参数进行去嵌(一)

传统上,RF和微波组件被设计成具有同轴接口的封装。通过连接一系列这些单独的同轴设备,可以容易地制造复杂的系统。使用使用类似同轴接口的标准测试设备可以很容易地测量这些部件和系统的性能。然而,现代系统需要更高水平的组件集成、更低的功耗和更低的制造成本。射频组件正在迅速从使用昂贵同轴接口的设计转向使用印刷电路板和表面贴装技术(SMT)的设计。传统的同轴接口甚至可以从最终产品中取消。这就给设计者留下了用需要同轴接口的测试设备测量这些射频和微波组件性能的问题。解决方案是使用连接同轴和非同轴传输线的测试夹具。

小孟同学的博客 1万+

【动态规划】深入动态规划:背包问题

动态规划--背包问题

2403_87459748的博客 1668

【DaVinci Developer专题】-28-Client Server Port Interface中useArgumentType、useArrayBaseType和useVoid介绍

共7页 目录 1 ImplPolicy = useArgumentType 2 ImplPolicy = useArrayBaseType 3 ImplPolicy = useVoid 4 三者代码差异部分 5 结尾 <--返回「实战篇」博文-总目录--> <--返回「Autosar从入门到精通-实战篇」专栏主页--> 关键字: 缩略语/术语 含义 DEV DaVinci Developer

「汽车电子助手」的博客 1502

用群辉NAS打造影视墙(Jellyfin篇)

之前的文章提到过,用群辉NAS组建影视播放系统可以采用官方提供的Video Station套件,不过影视信息配比较差,响应速度也欠佳,今天我们就聊聊别的套件。在影音媒体方面,常见的还有Emby、Plex、Jellyfin。本文主讲Jellfin的原因是它胜在免费,而且功能比较齐全,完全够用。详细信息可以参考Jellyfin的官网:https://jellyfin.org/

dgnankai的专栏 7323

Java-算法-动态规划-背包问题

一. 背包问题介绍 二. 0/1背包 1. dp表 2. 状态转移方程 3. 代码实现 4. 滚动数组 5. leetcode实战 (1)leetcode416分割等和子集

weixin_45532984的博客 7746

区块链技术概述:从比特币到Web3.0

区块链技术正重塑数字世界的信任机制。本文系统梳理了区块链的发展路径:从比特币的PoW共识和UTXO模型,到以太坊的智能合约和账户体系,直至Web3.0的去中心化互联网愿景。文章详细解析了区块链的核心特性(去中心化、不可篡改等)和数据结构,通过流程图展示了比特币交易生命周期和智能合约执行流程,并对比了Web2.0与Web3.0的关键差异。最后,用Python代码实现了包含区块类、交易处理和挖矿机制的简易区块链系统,为理解区块链底层原理提供了实践参考。

闲人编程的博客 455

动态规划算法解决背包问题(Java实现)

文章收藏的好句子:你在书本上花的任何时间,都会在某一个时刻给你回报。目录1、动态规划算法的概述2、背包问题3、动态规划算法解决背包问题 3、1 不可重复装入商品 3、2思路分析1、动态规划算法的概述(1)动态规划算法的思想是:将大问题分为小问题进行解决,使得一步步获得最优解的处理算法。(2)动态规范算法与分治算法很类似,思想都是以待解决问题先分解成 n ...

qq_37837621的博客 4311

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

java 动态规划策略原理及例题

动态规划(dynamic programming)是运筹学的一个分支,是求解决策过程(decision process)最优化的数学方法。在面试笔试中动态规划也是经常作为考题出现,其中较为简单的DP题目我们应该有百分之百的把握顺利解决才可以。动态规划定义动态规划实际上是一类题目的总称,并不是指某个固定的算法。动态规划的意义就是通过采用递推(或者分而治之)的策略,通过解决大问题的子问题从而解决整体的做

往事散云烟,十寸光阴换一钱 1万+

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

01背包问题 动态规划 java实现 简单通俗易懂

** 01背包问题 动态规划 ** 1.动态规划 什么是动态规划?动态规划就是将一个大问题不断向下拆分成小问题,直到拆分出的小问题可以求出其解,然后将小问题的解不断的向上合并,最终得到大问题的解决方案。    2.01背包问题 一个旅行者有一个最多能装m公斤的背包,现在有n中物品,每件的重量分别是W1、W2、……、Wn,每件物品的价值分别为C1、C2、……、Cn, 需要将物品放入背包中,要怎么样放...

weixin_44026997的博客 6271

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

动态规划算法详解,Java实现相关例题。

前沿基础: 一)基本理解: 1、动态规划定义:将将原问题拆解为若干个子问题,同时保留子问题的答案,使得每个子问题只求解一次最终得到原问题的答案。 这样一听总感觉和分治算法很像,其实动态规划就是将分治递归算法转化成了非递归形式,减少了系统栈的调用,使用循环来解决问题。 2、动态规划算法的说白了就是找到整个问题的全局最优解,这也是与贪心算法寻找局部最优解的本质区别。 3、通常我们可以先用从顶向下的思考方式来写出递归分治的代码,然后再联想从低向下的思想来转化为动态规划代码. 4、无论是递...

weixin_60414376的博客 4384

Java算法之动态规划

​ 动态规划通常用于求解具有最优子结构特性的问题,即问题的最优解可以由其子问题的最优解有效地构造出来。此外,动态规划还要求子问题空间必须足够小,即子问题的数量随着问题规模的增加不会增长得太快,以便能够用有限的内存和时间来解决。

zzx0419_的博客 2382

详解:动态规划算法【Java实现】——背包问题

背包问题主要是指一个给定容量的背包若干,具有一定价值和重量的物品,如何选择物品放入背包使物品的价值最大。其中又分01背包(01背包:每个物品只有一件可用)和完全背包(完全背包指的是:每种物品都有无限件可用)

m0_52729352的博客 3436

0-1背包问题(动态规划)附例题详解——java实现

0-1 背包问题(java实现)代码在最后    给定 n 种物品,每种物品有对应的重量weight和价值value,一个容量为 maxWeight 的背包,问:应该如何选择装入背包的物品,使得装入背包中的物品的总价值最大?面对每个物品,我们只有选择拿取或者不拿两种选择,不能选择装入某物品的一部分,也不能装入同一物品多次。使用动态规划思想,很容易想到,我们需要一个空间来储存:从0号物品开始,对于每...

likunkun__的博客 2万+

动态规划算法(一):背包问题

背包问题是一类经典的优化问题,涉及如何在给定约束条件下做出最优决策。最常见的背包问题是0-1 背包问题,它可以描述为:给定一个背包,背包有一个容量,有个物品,每个物品都有一个重量​ 和一个价值,求如何从中选择物品,使得背包的总重量不超过且总价值最大。定义一个二维数组,表示前个物品在背包容量为时能够得到的最大价值。状态转移方程边界条件,表示没有物品时,最大价值为 0。,表示背包容量为 0 时,最大价值为 0。动态规划是一种强大的算法思想,可以有效地解决背包问题及其他许多优化问题。

一碗黄焖鸡三碗米饭的博客 1169
上一篇: 算法学习——动态规划 例题:最长公共子序列问题(java)
下一篇: 算法学习——动态规划 例题:两字符串转换权最小问题(java)
ArchitectDream
博客等级 码龄9年 48粉丝 288原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值