0-1背包问题暴力递归
给你一系列物品的价值数组和所占背包容量的数组,给你一个有限容量的背包,求能背的背包的最大值,并返回这个最大值。
这里是不能多拿背包的,也就是这里的背包都有且只有一个。
实现如下,首先递归函数的逻辑就是:选择拿不拿当前遍历到的背包,如果拿就要选择加上当前背包的价值,并且把当前背包的所占容量也加上去,在遍历到下一个index,这里index就推动了递归的进行,并且两个终止条件分别代表的意思是如果当前情况下背包已经占有的容量大于了背包的容量,这时候返回一个不成功,此时这个背包在当前情形下是不能有的,返回一个-1,在比大小的时候就自然不会要这条分支,顺水推舟,这个已经占有的容量应该伴随递归函数。process可以理解为index及以后的所有情况的最大值。
public static void main(String[] args) {int[] bagContain = new int[]{2, 4, 4};int[] bagValue = new int[]{9, 1, 8};int maxContain = 5;int res = knapsack(bagContain, bagValue, maxContain);System.out.println(res);}private static int knapsack(int[] bagContain, int[] bagValue, int maxContain) {return process(bagContain, bagValue, 0, maxContain, 0);}private static int process(int[] bagContain, int[] bagValue, int index, int maxContain, int alreadyContain) {if (alreadyContain > maxContain) {return -1;}if (index == bagContain.length) {return 0;}int p1 = process(bagContain, bagValue, index + 1, maxContain, alreadyContain);//不要此背包直接跳过int p2Next = process(bagContain, bagValue, index + 1, maxContain, alreadyContain + bagContain[index]);int p2 = -1; //要此背包的值为p2if (p2Next != -1) {p2 = bagValue[index] + p2Next;}return Math.max(p1, p2);//返回两种情况下的最大值}
0-1背包问题暴力递归相关推荐
- 背包问题算法实现(全组合、暴力递归、动态规划及空间压缩、对数器)
背包问题的实现 * 1.全组合解法(对数器) * 2.暴力递归解法 * 3.动态规划解法 * 4.动态规划(省空间)解法 对数器的思路是:求解n个物品的全组合中不超过背包容量的组合对应的最大价值(时间 ...
- 汉诺塔递归的空间复杂度_暴力递归与动态规划 1.0
有些暴力递归不能被改成动态规划,因为他本身要求的解空间无法被压缩了. eg:汉诺塔问题,我们必须打印那些步骤. 如果要写一个动态规划,先写成暴力递归的版本,然后模板化修改. 先写递归版本: 不妨记递归 ...
- 算法入门篇九 暴力递归
牛客网 左程云老师的算法入门课 暴力递归 原则 汉诺塔问题 问题 打印n层汉诺塔从左边移动到最右边的过程 思想 一共六个过程,左到右.左到中,中到左,中到右,右到左,右到中,互相嵌套使用 左到右 将 ...
- 令人头疼的背包九讲(1)0/1背包问题
点击上方"Jerry的算法和NLP",选择"星标"公众号 重磅干货,第一时间送达 背包问题是一个经典的动态规划模型.它既简单形象容易理解,又在某种程 ...
- 带你击杀动态规划梦魇-从暴力递归到动态规划
本文章欢迎转载,但是转载请标明出处,程序锋子https://blog.csdn.net/l13591302862/article/details/111410091 想要分享下自己之前学习动态规划的过 ...
- 算法与数据结构——算法基础——暴力递归(回溯)(java)(左程云b站课程总结)
暴力递归 暴力递归就是尝试 类似于回溯:可以理解为回溯就是在暴力递归的基础上在每个操作步骤加上标记和取消标记的处理 把问题转化为规模缩小了的同类问题的子问题 有明确的不需要继续进行递归的条件(base ...
- 算法补天系列之——暴力递归
首先补充一下之前的迪杰斯特拉算法,也可以用堆的形式来实现,不过这个是肯定不能用系统提供的堆来实现的,因为这里有一个新发现的更小的路径,要修改堆的数据. 所以自己写堆的本领是必须要的,堆的底层结构是一个 ...
- 0/1背包问题-----回溯法求解
问题描述 有n个物品和一个容量为c的背包,从n个物品中选取装包的物品.物品i的重量为w[i],价值为p[i].一个可行的背包装载是指,装包的物品总重量不超过背包的重量.一个最佳背包装载是指,物品总价值 ...
- 0/1背包问题-----动态规划求解
问题描述 有n个物品和一个容量为c的背包,从n个物品中选取装包的物品.物品i的重量为w[i],价值为p[i].一个可行的背包装载是指,装包的物品总重量不超过背包的重量.一个最佳背包装载是指,物品总价值 ...
最新文章
- X射线图像中的目标检测
- MF训练套件(1):如何去除应用标题?
- Android 反射获取内外置存储卡方法
- php 写一个大富翁游戏,C++大富翁代码 现在要设计一个类似“大富翁”的游戏:有一条由20个格子组成的 联合开发网 - pudn.com...
- 三星5nm产品开发进度出问题,高通紧急向台积电求援
- 快门光圈感光度口诀_光圈、快门、感光度之间的关系
- .NET连接MySQL数据库并绑定于datagridview。
- JavaScript深入之执行上下文栈 1
- 强制更改wifi名前缀CMCC
- SLA是什么意思 ?
- 煮酒论英雄——点评三国人物
- 初识Continuation
- wlacm一笔画问题(图的遍历) 题解
- Java打印实心菱形和空心菱形
- 软件开发中项目经理有那些职责
- 浅析GIS行业地图绘制基本要求
- 测试工程师转开发希望大吗?
- STM32F103C8T6模拟IIC控制4针0.96寸OLED显示屏
- 沐神动手深度学习 06线性回归从0开始实现
- PNG文件编码解析之PNG文件格式中的所有数据块以及标识
热门文章
- Java黑皮书课后题第2章:2.10(科学:计算能量)编写程序,计算将水从初始温度加热到最终温度所需的能量。程序应该提示用户输入水的重量(kg),以及水的初始温度、最终温度
- mezzanine安装配置
- 1005. 继续(3n+1)猜想 (25)
- sql判断字段是否为空
- 调用支付宝PHP接口API实现在线即时支付功能(UTF-8编码)
- C#透明窗体实现方法
- APScheduler —— Python化的Cron
- MVC架构在Asp.net中的应用和实现
- Searchsploit
- HarmonyOS之应用开发的电话服务与蜂窝网络