动态规划入门(一) 01背包问题

目录

一. 问题描述

二. 题解及代码


一. 问题描述

背包问题(Knapsack problem)是一种组合优化的NP完全问题(NP完全问题,是世界七大数学难题之一)。

背包问题可以描述为:给定一组物品,每种物品都有自己的重量和价格,在限定的总重量内,我们如何选择,才能使得物品的总价格最高。问题的名称来源于如何选择最合适的物品放置于给定背包中。根据条件不同,其具体可以分为01背包(基础背包)、完全背包、多重背包、分组背包等不同类型的问题,具体可以搜索背包九讲。

01背包也称为基础背包,是最基本的背包问题,说的是一共有 N 件物品(每件物品仅有一件),第 i(i从1开始)件物品的重量为w[i],价值为v[i]。在总重量不超过背包承载上限W的情况下,求能够装入背包的最大价值是多少?并输出具体选择的哪个物品?

二. 题解及代码

        使用二维数组 dp[i][j] 表示从下标为[0-i]的物品里任意取,放进容量为j的背包,价值总和最大是多少。每件物品只有两种选择即放或不放,放入的话就要判断总价值是否会更大,其递推公式及参考代码如下:

dp[i][j] = Max( dp[i-1][j] ,dp[i-1][ j-wᵢ ]+vᵢ ) 

#include <stdio.h>
#include<string.h>int backpack[1000][1000];
int wi[1000];
int value[1000];
int x[1000];int main()
{int t;scanf("%d",&t);while(t--){int n,j,i,C;scanf("%d%d",&n,&C);for(i=1;i<=n;i++)scanf("%d",&wi[i]);for(i=1;i<=n;i++)scanf("%d",&value[i]);memset(backpack,0,sizeof(backpack));for(i=n;i>=1;i--){for(j=0;j<=C;j++){if(j<wi[i])backpack[i][j]=backpack[i+1][j];elsebackpack[i][j]=backpack[i+1][j]>(backpack[i+1][j-wi[i]]+value[i])?backpack[i+1][j]:backpack[i+1][j-wi[i]]+value[i];}}printf("最大值是:%d\n",backpack[1][C]);//二维数组倒推输出具体选择物品信息j=C;for(i=1;i<n;i++){if(backpack[i][j]==backpack[i+1][j])x[i]=0;else{j=j-wi[i];x[i]=1;}}if(backpack[n][j]==0)x[n]=0;else x[n]=1;for(i=1;i<=n;i++){if(x[i]!=0)printf("%d ",i);}printf("\n");}return 0;
}

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

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

相关文章

基于SpringBoot的餐饮管理系统的设计与实现

文章目录 项目介绍主要功能截图:部分代码展示设计总结项目获取方式🍅 作者主页:超级无敌暴龙战士塔塔开 🍅 简介:Java领域优质创作者🏆、 简历模板、学习资料、面试题库【关注我,都给你】 🍅文末获取源码联系🍅 项目介绍 基于SpringBoot的餐饮管理系统的设计与实…

django静态文件命名空间

本篇继续使用投票项目学习&#xff0c;关于投票应用更多内容&#xff0c;请查看 Django创建投票应用-CSDN博客 目录结构 在 polls 目录下创建一个名为 static 的目录。Django 将在该目录下查找静态文件&#xff0c;这种方式和 Diango 在 polls/templates/ 目录下查找 templat…

整除判断-判断正整数a能否被b整除,如果不能整除,输出商和余数 C语言xdoj42

问题描述 判断正整数a能否被b整除&#xff0c;如果不能整除&#xff0c;输出商和余数 输入说明 输入两个正整数a和b&#xff08;0<a, b<10000&#xff09;&#xff0c;a和b之间用空格分隔。 输出说明 如果a能被b整除&#xff0c;输出yes&#xff0c;否则在同…

【零基础入门TypeScript】函数

目录 可选参数 示例&#xff1a;可选参数 其余参数 示例&#xff1a;剩余参数 默认参数 句法 示例&#xff1a;默认参数 匿名函数 句法 示例 ─ 一个简单的匿名函数 示例 ─ 带参数的匿名函数 函数表达式和函数声明 ─ 它们是同义词吗&#xff1f; 函数构造器 句…

python封装接口自动化测试套件

在Python中&#xff0c;我们可以使用requests库来实现接口自动化测试&#xff0c;并使用unittest或pytest等测试框架来组织和运行测试套件。以下是一个基本的接口自动化测试套件封装示例&#xff1a; 首先&#xff0c;我们需要安装所需的库&#xff1a; pip install requests …

《MySQL系列-InnoDB引擎04》MySQL表相关介绍

文章目录 第四章 表1 索引组织表2 InnoDB逻辑存储结构2.1 表空间2.2 段2.3 区2.4 页2.5 行2.6 拓展&#xff1a;MySQL的varchar(n)能存储几个字符&#xff1f;占多少字节&#xff1f; 3 InnoDB行记录格式4 文件格式5 约束5.1 数据完整性5.2 约束的创建和查找5.3 约束和索引的区…

2023-2024学年上学期算法设计与分析题期末考试模拟卷

2023-2024学年上学期算法设计与分析题期末考试模拟卷 文章目录 2023-2024学年上学期算法设计与分析题期末考试模拟卷单选题程序填空题输入格式:输出格式:输入样例1:输出样例1: 主观题 注意&#xff1a;该题集非标准答案&#xff0c;仅供参考&#xff0c;如果异议&#xff0c;请…

鸿蒙学习笔记

DevEco Studio, ArkTS, ArkUI, ArkCompiler, DevEco Testing是啥 DevEco Studio是华为开发的一款集成开发环境&#xff08;IDE&#xff09;&#xff0c;用于开发基于华为鸿蒙操作系统&#xff08;HarmonyOS&#xff09;的应用程序。它提供了丰富的开发工具和功能&#xff0c;包…

vue3 实现关于 el-table 表格组件的封装以及调用

一、示例图&#xff1a; 二、组件 <template><div class"sn-table" :class"props.colorType 1 ? : bg-scroll"><el-table :data"tableData" :row-class-name"tableRowClassName" height"500" style"…

DevOps(8)

目录 36.当发出的命令与上次使用时产生的结果不同时&#xff0c;会出现什么问题&#xff1f; 37./usr /local的内容是什么&#xff1f; 38.你如何终止正在进行的流程&#xff1f; 39.如何在命令行提示符中插入注释&#xff1f; 40.什么是命令分组以及他是如何工作的&…

istio 灰度发布部署(包括 deploy、svc、gw、vs 和 dr)

创建 deployment 分别部署两个版本的 deployment。在灰度发布的过程中&#xff0c;注意 pod 标签的设置&#xff0c;后续 svc 和 dr 就是根据标签来划分 pod apiVersion: apps/v1 kind: Deployment metadata:labels:app: bbjcxtversion: v1name: bbjcxtnamespace: mm-nbxt-hu…

云卷云舒:【实战篇】Redis迁移

1. 简介 Remote Dictionary Server(Redis)是一个由Salvatore Sanfilippo写的key-value存储系统&#xff0c;是一个开源的使用ANSIC语言编写、遵守BSD协议、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库&#xff0c;并提供多种语言的API。 2. 迁移原理 redis-sh…

什么是 RFID 及其工作原理?

一、自动识别技术 自1999年麻省理工学院研究人员的首创开始&#xff0c;自动识别技术&#xff08;简称auto-ID&#xff09;的领域不断扩大。自动识别技术形成了多种技术路线&#xff0c;使我们能够自动、精确地捕获、识别和存储与物体、物品或个人相关的数据&#xff0c;从而减…

Selenium-java 定位元素时切换iFrame时的方法

具体方法如下图所示&#xff0c;如果iFrame中嵌套多层iFrame需要逐层定位到需要的那一层iFrame,完成操作后&#xff0c;执行该代码&#xff1a;driver.switchTo() .defaultContent() ; 是返回最顶部的frame

hyperf 二十 数据库 三 创建脚本

教程&#xff1a;Hyperf 根据之前文章&#xff1a;hyperf 十九 数据库 二 模型-CSDN博客 应该能了解到visitors参数。 根据教程&#xff0c;使用visitors参数创建脚本。在配置在设置visitors参数&#xff0c;格式为数据。 一、可选脚本说明 Hyperf\Database\Commands\Ast…

理解二叉树的遍历(算法村第七关白银挑战)

二叉树的前序遍历 144. 二叉树的前序遍历 - 力扣&#xff08;LeetCode&#xff09; 给你二叉树的根节点 root &#xff0c;返回它节点值的 前序 遍历。 示例 1&#xff1a; 输入&#xff1a;root [1,null,2,3] 输出&#xff1a;[1,2,3]解 LeetCode以及面试中提供的方法可能…

科普:嵌入式多核并行仿真

自信息技术革命以来&#xff0c;计算机一直被应用在各种复杂的数据处理中&#xff0c;如火箭弹道&#xff0c;高能物理和生物学数据等。随着嵌入式领域的多样化需求的不断丰富&#xff0c;多核CPU的应用也越来越广泛&#xff1a;嵌入式系统通常需要同时处理多个任务和实时数据&…

【C语言】6-3 分别实现单个“图书”类型变量的输入和输出。分数 10

6-3 分别实现单个“图书”类型变量的输入和输出。 分数 10 全屏浏览题目 切换布局 作者 赵静静 单位 浙江工贸职业技术学院 编写2个函数&#xff0c;分别实现单个“图书”类型变量的输入和输出。其中“图书”的成员包括书名、ISBN、单价、作者、出版社。 函数接口定义&…

ChatGPT是什么,海鲸AI软件功能有哪些

ChatGPT是一种基于人工智能的对话生成技术&#xff0c;它利用深度学习模型来理解和生成自然语言对话。ChatGPT的核心是一种称为生成式预训练模型(GPT)的技术&#xff0c;它能够根据输入的对话内容生成连贯、自然的回答&#xff0c;实现智能对话的目的。这种技术的出现&#xff…

高级鉴权验签方式的实践,技术方案为注解+ASCII排序+多类型多层级动态拼接+RSA加密(或国密SM2)+Base64+Redis滑动窗口限流

背景 虽然大多数企业的流量没有那么大&#xff0c;不过限流还是要有的&#xff0c;毕竟还有外部调用我方系统接口&#xff0c;需要验证访问权限进行&#xff0c;同时防止万一接口并发量大影响我方系统&#xff0c; 所以要增加流控处理&#xff1b;不同的来源在独立配置&#x…