动态规划学习——背包问题

问题:

有一个背包,有最大的可以承受的重量Weight
有一些物品,每个物品都有相应的重量和价值
给两个数组w[]和v[],其中w[i]表示第i个物品的重量,v[i]表示第i个物品的价值
求如何拿才能在不超过背包承重的情况下拿到的最大价值


问题分析:
对于每一个物品都有“拿”和“不拿”两个选项
在对第i个物品做出选择的时候:
若选择拿,则结果为“在对第i+1个物品做出拿或不拿选择获得的最大价值加上该物品的价值”,并且此时背包的剩余重量要减去该物品重量
若选择不拿,则结果为“在对第i+1个物品做出拿或不拿选择获得的最大价值”,且此时背包剩余质量不用减去该物品的重量
 

代码如下:

#include<iostream>
#include<algorithm>
using namespace std;
int Weight=0;//背包最大承重
int N;//物品总数
int w[1000],v[1000];
int ways2_temp[10000][10000];//法一 直接递归
int ways1(int index,int restWeight)
{if(restWeight<0) return -1; //如果剩余空间为负,则不能拿if(index==N) return 0; //递归出口,所有的物品都已经考虑完了int t1=ways1(index+1,restWeight);int t2=0;int next=ways1(index+1,restWeight-w[index]);//拿了该物品后,可能剩余空间为负的,即该物品装不下,所以需要判断是否能拿该物品,如果不能即返回-1则不能拿if(next!=-1){t2=v[index]+next;//拿完该物品后剩余空间不为负,才可以拿该物品}return max(t1,t2);
}//法二:动态规划
int ways2()
{int index,restWeight;//index为当前扫描数组到达的索引,restWeight为背包剩余的容量for(restWeight=0;restWeight<=Weight;restWeight++) ways2_temp[N][restWeight]=0; //递归的出口,也是动态规划的开始,即从数组的最后一排开始向上填充数组//根据直接递归的依赖条件来填充动态规划数组for(index=N-1;index>=0;index--){for(restWeight=0;restWeight<=Weight;restWeight++){int p1=ways2_temp[index+1][restWeight];int p2=0;int next=restWeight-w[index]<0?-1:ways2_temp[index+1][restWeight-w[index]];if(next!=-1) p2=v[index]+next; ways2_temp[index][restWeight]=max(p1,p2);}}return ways2_temp[0][Weight];
}int main()
{cout<<"请输入背包最大承重"<<endl;cin>>Weight;cout<<"请输入物品总数";cin>>N;int i,j;cout<<"请按顺序输入物品的重量"<<endl;for(i=0;i<N;i++) cin>>w[i];cout<<"请按顺序输入物品的价值"<<endl;for(i=0;i<N;i++) cin>>v[i];int result1=ways1(0,Weight);cout<<"直接递归的结果为 "<<result1<<endl;int result2=ways2();cout<<"动态规划的结果为 "<<result2<<endl;return 0;
}

参考资料:

bilibili 马士兵教育——左程云

【应B友要求火速上线!算法大神(左程云)教你从暴力递归到动态规划,吊打所有暴力递归、动态规划问题】https://www.bilibili.com/video/BV1ET4y1U7T6?p=13&vd_source=4e9b7dd8105df854ae96830c97920252

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

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

相关文章

Hive之set参数大全-16

配置 HiveServer2 中 Tez Workload Manager (WM) Application Master (AM) 注册的超时时间 在 Hive 中&#xff0c;hive.server2.tez.wm.am.registry.timeout 是一个参数&#xff0c;用于配置 HiveServer2 中 Tez Workload Manager (WM) Application Master (AM) 注册的超时时…

高斯分布的应用,正态分布的实践应用,什么是极大似然估计法

目录 高斯分布的应用 正态分布的实践应用 什么是极大似然估计法 高斯分布的应用

【leetcode刷刷】235. 二叉搜索树的最近公共祖先 、701.二叉搜索树中的插入操作 、450.删除二叉搜索树中的节点

235. 二叉搜索树的最近公共祖先 class Solution:def lowestCommonAncestor(self, root: TreeNode, p: TreeNode, q: TreeNode) -> TreeNode:# 递归if not root: return if root.val p.val: return pif root.val q.val: return qleft Noneright Noneif root.val > p.…

LeetCode2859. Sum of Values at Indices With K Set Bits

文章目录 一、题目二、题解 一、题目 You are given a 0-indexed integer array nums and an integer k. Return an integer that denotes the sum of elements in nums whose corresponding indices have exactly k set bits in their binary representation. The set bits…

前后端交互—使用自己的服务器开发项目

代码下载 完善服务器 对于上一篇博客开发的服务端项目&#xff0c;还需要增加文章列表查询&#xff0c;文章删除&#xff0c;文章更新三个接口。 文章列表查询接口 验证表单数据 在路径 schema/user.js 中增加 articles 验证表单数据&#xff0c;其中使用的 .allow() 表示…

【misc | CTF】攻防世界 适合作为桌面

天命&#xff1a;这题还挺繁琐的&#xff0c;知识点还不少 目录 步骤1&#xff1a;图片隐写 步骤2&#xff1a;Winhex查看ascii码 步骤1&#xff1a;图片隐写 拿到这张图片&#xff0c;不可能扔进ps会有多图层&#xff0c;普通图片也就一个图层而已 但居然可以有隐写图片这…

【C语言】深入理解指针(3)数组名与函数传参

正文开始——数组与指针是紧密联系的 &#xff08;一&#xff09;数组名的理解 &#xff08;1&#xff09;数组名是数组首元素的地址 int arr[10] {1,2,3,4,5,6,7,8,9,10}; int *parr &arr[0]; 上述代码通过&arr[0] 的方式得到了数组第一个元素的地址&#xff0c;…

绿色制造的行业标杆OEKO-TEX STeP认证

STeP是“OEKO-TEX国际环保纺织协会”推出的一个独立的第三方认证体系。STeP全称Sustainable Textile & Leather Production&#xff08;可持续纺织和皮革生产&#xff09;&#xff0c;是面向纺织和皮革供应链中环保且负有社会责任的生产工厂推出的透明认证体系。 STeP认证的…

【Mybatis plus】使用分页查询,报错 Parameter ‘xxx‘ not found. Available parameters are xxx

文章目录 0 先给出错误场景java entity 实体类java mapper 接口方法Java mapper 所对应的 mapper.xml 信息异常信息 1 解决办法step1: 给 mapper 接口方法加上具名参数指定&#xff0c;如下&#xff1a;step2: 修改 mapper.xml 的查询信息&#xff0c;都加上 具名 限定 2 异常原…

快快销ShopMatrix 分销商城多端uniapp可编译5端-代理商收益管理:差价奖励和销售额统计

代理商收益管理是一种针对代理商的利润分配模式&#xff0c;主要通过差价奖励和销售额统计来实现。这种模式的核心思想是通过激励代理商的销售行为&#xff0c;提高代理商的积极性和销售效率&#xff0c;从而实现整个销售网络的增长。 差价奖励是代理商收益管理中的一种常见方…

电商系统设计到开发03 引入Kafka异步削峰

一、前言 系统设计&#xff1a;电商系统设计到开发01 第一版设计到编码-CSDN博客 接着上篇文章&#xff1a;电商系统设计到开发02 单机性能压测-CSDN博客 本篇为大制作&#xff0c;内容有点多&#xff0c;也比较干货&#xff0c;希望可以耐心看看 已经开发的代码&#xff0…

配置ARP安全综合功能示例

组网图形 ARP安全简介 ARP&#xff08;Address Resolution Protocol&#xff09;安全是针对ARP攻击的一种安全特性&#xff0c;它通过一系列对ARP表项学习和ARP报文处理的限制、检查等措施来保证网络设备的安全性。ARP安全特性不仅能够防范针对ARP协议的攻击&#xff0c;还可以…

uniapp点击事件报错 Cannot read property ‘stopPropagation‘ of undefined

问题产生&#xff1a;在列表上有个小按钮&#xff0c;可点击弹出选择框。 列表本身可点击进入详情页。所以想用click.stop来阻止点击小按钮时候&#xff0c;触发列表的点击事件。 结果&#xff1a;如图所示 解决方案&#xff1a;发现自己用的是icon&#xff0c;在icon上加click…

2. HarmonyOS 应用开发 DevEco Studio 准备-2

2. HarmonyOS 应用开发 DevEco Studio 准备-2 首选项设置 中文设置 主题 字体 插件安装和使用 保存时操作 编辑器 工程树管理 代码树管理 标记 字符串可视化编辑 参考文档 常用快捷键 编辑 查找或替换 编译与运行 调试 其他 预览 页面预览 自定义组件预览 预览…

[学习笔记] ONNX 基础知识

1. ONNX 简介 1.1 什么是 ONNX 开放神经网络交换 ONNX&#xff08;Open Neural Network Exchange&#xff09;是一套表示深度神经网络模型的开放格式&#xff0c;由微软和 Facebook 于 2017 推出&#xff0c;然后迅速得到了各大厂商和框架的支持。通过短短几年的发展&#xf…

文档 OCR 识别优化为异步思路逻辑

文档 OCR 识别优化 同步处理&#xff08;原逻辑&#xff09; 当前系统识别文档为同步处理&#xff0c;已调整过 python 服务部分参数&#xff0c;但 一份40M左右文档识别仍需要几十秒 文档转为图片集合for 循环中一直调用 ocr 识别 异步处理 nginx 增加 requestId header …

系统架构17 - 软件工程(5)

软件工程 系统测试测试原则测试方法静态测试动态测试黑盒测试白盒测试灰盒测试自动化测试 系统测试 软件测试是使用人工或自动的手段来运行或测定某个软件系统的过程&#xff0c;其目的在于检验它是否满足规定的需求或弄清预期结果与实际结果之间的差别。 软件测试方法的分类有…

C++大学教程(第九版)7.19 将7.10节vector对象的例子转换成array对象

文章目录 题目代码运行截图 题目 (将7.10节vector 对象的例子转换成array 对象)将图7.26中 vector 对象的例子转换成使用array 对象。请消除任何 vector 对象仅有的特性。 分析&#xff1a; vector对象独有的特性&#xff1a; 1.vector对象长度可变 2.长度不同的vector对象可…

查看php-fpm占用内存情况

1、查看每个php-fpm占用的内存大小 ps -ylC php-fpm --sort:rss 2 查看单个php-fpm进程消耗内存的明细 pmap $(pgrep php-fpm) | less pmap pmap命令用于显示一个或多个进程的内存状态 pmap [ -x | -d ] [ -q ] pids 参数&#xff1a; -x extended Show the extended f…

蓝桥小白赛4 乘飞机 抽屉原理 枚举

&#x1f468;‍&#x1f3eb; 乘飞机 &#x1f437; 抽屉原理 import java.util.Scanner;public class Main {static int N 100010;static int[] a new int[N];public static void main(String[] args){Scanner sc new Scanner(System.in);int n sc.nextInt();int q s…