P1439 背包九讲(1):简单的0-1背包

P1439 背包九讲1:简单的0-1背包

  • 一、原题呈现
    • 1、题目描述
    • 2、输入描述
    • 3、输出描述
    • 4、样例输入
    • 5、样例输出
  • 二、思路分析
    • 这是一个最基础的01背包问题。
  • 三、整体代码

一、原题呈现

1、题目描述

有一个箱子容量为 V(正整数,0<=V<=20000),同时有 n 个物品(0<n<=30),每个物品有一定的体积和价值。要求 n 个物品中,任取若干个装入箱内,在箱子能放得下的前提下,满足箱子内部的价值最大。

2、输入描述

一个整数 v,表示箱子容量
一个整数 n,表示有 n 个物品
接下来 n 个整数,分别表示这 n 个物品的各自体积和价值

3、输出描述

一个整数,表示箱子能装下的最大价值。

4、样例输入

3
2
2 100
4 200

5、样例输出

100

二、思路分析

这是一个最基础的01背包问题。

在这里插入图片描述

这里本人懒得画图,截取了某个大佬的图片来讲解
1、首先我们是按照行来进行遍历。
2、第0行和第0列全都设置为默认0,并且这个单元格的意思是可以选取i行以上的物品,并且背包大小为j,此时能够装到背包内物品价值的最大值
3、我们假设选取第二行第三列的位置,此时我们对于背包的处理有两种情况
(1)不装入物品,那么re[i][j] = re[i - 1][j]
(2)装入该行的物品,那么留给前面的背包质量就为j - weight[i],因此我们可以定位到第i-1行,j - weight[i]列的re值,加上新放入的物品的价值就为re[i][j]的值,即re[i][j] = re[i - 1][j - weight[i]] + value[i]
4、我们将上面两种情况进行求最大值,就是当前re[i][j]的值
5、特殊情况:如果当前背包装不下这个物品(即j - weight[i] < 0),那么我们就直接继承上一行这一列值,即re[i][j] = re[i - 1][j]

三、整体代码

#include<iostream>
#include<math.h>
#include<algorithm> 
using namespace std;

int main() {
	int v, n, i, j;
	while(cin>>v>>n) {
		int re[35][21000] = {0};
		int weight[40], value[40];
		for(i = 1; i <=n; i++)
			cin>>weight[i]>>value[i];
		for(i = 1; i <= n; i++) {
			for(j = 1; j <= v; j++) {
				if(j - weight[i] < 0)
					re[i][j] = re[i - 1][j];
				else {
					re[i][j] = max(re[i - 1][j], re[i - 1][j - weight[i]] + value[i]);
				}
			}
		}
		cout<<re[n][v]<<endl;
	}
	return 0;
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Java SE:集合

1. 单列集合顶层接口Collection 集合&#xff1a;将一个个数据结构写好封装成类&#xff0c;方便开发者调用 单列集合底下有两大接口&#xff1a;List和Set List底下有3个集合类&#xff1a;ArrayList&#xff08;数组&#xff09;、LinkedList&#xff08;链表&#xff09;…

【NI-DAQm入门】构建应用程序案例1

1.系统框图 2.应用框图 3. 代码结构 3.1 技巧1 使用模拟采样时钟作为编码器的时钟源•(而不是使用隐式) 同步模拟输入和编码 3.2 技巧2 为模拟输入和计数器输入采集样本 写入相同采样点至文件 对齐数据文件 3.3 技巧3 数字读写技巧

FLUENT Meshing Watertight Geometry工作流入门 - 7 共享拓扑

本视频中学到的内容&#xff1a; “共享拓扑”任务的工作细节如何使用“更新边界”和“更新区域”任务来更新边界和区域的属性 视频链接&#xff1a; FLUENT Meshing入门教程-7应用共享拓扑_哔哩哔哩_bilibili 【Import Geometry】 启动Ansys Fluent进入网格模式。在工作流类…

Swing程序设计(10)列表框,文本框,文本域,密码框

文章目录 前言一、列表框二、文本框&#xff08;域&#xff09; 1.文本框2.文本域三、密码框总结 前言 该篇文章简单介绍了Java中Swing组件里的列表框、文本框、密码框。 一、列表框 列表框&#xff08;JList&#xff09;相比下拉框&#xff0c;自身只是在窗体上占据固定的大小…

第三百四十九回

文章目录 1. 概念介绍2. 原理与方法2.1 知识对比2.2 使用方法 3. 示例代码4. 内容总结 我们在上一章回中介绍了"加密包crypto"相关的内容&#xff0c;本章回中将介绍characters包.闲话休提&#xff0c;让我们一起Talk Flutter吧。 1. 概念介绍 在项目中会遇到获取字…

Paper - CombFold: predicting structures of large protein assemblies 论文简读

欢迎关注我的CSDN&#xff1a;https://spike.blog.csdn.net/ 本文地址&#xff1a;https://spike.blog.csdn.net/article/details/136143199 CombFold: predicting structures of large protein assemblies using a combinatorial assembly algorithm and AlphaFold2 CombFold…

从物联网到数字孪生:智慧社区的演变

随着科技的飞速发展和数字化转型的深入推进&#xff0c;智慧社区已成为提升城市治理水平和居民生活质量的重要方向。在这一演变过程中&#xff0c;物联网和数字孪生技术起到了至关重要的作用。本文将深入探讨从物联网到数字孪生的演变过程&#xff0c;分析这一转变对智慧社区建…

EasyRecovery软件免费版与付费版有哪些功能区别?

免费版的EasyRecovery软件在功能和恢复能力上确实存在一些限制。 首先&#xff0c;在数据恢复方面&#xff0c;免费版通常只能恢复最多1GB的数据。这意味着&#xff0c;如果你需要恢复的数据量超过1GB&#xff0c;你将需要升级到付费版才能完全恢复。 其次&#xff0c;免费版…

LeetCode---384周赛

题目列表 3033. 修改矩阵 3034. 匹配模式数组的子数组数目 I 3035. 回文字符串的最大数量 3036. 匹配模式数组的子数组数目 II 一、修改矩阵 简单模拟即可&#xff0c;代码如下 class Solution { public:vector<vector<int>> modifiedMatrix(vector<vecto…

专业140+总分400+华中科技大学824信号与系统考研经验华科华中大电子信息与通信工程,真题,大纲,参考书。

今年考研落下帷幕&#xff0c;看到有人落寞&#xff0c;有人金榜题名&#xff0c;心里体会五谷杂陈&#xff0c;自己很幸运通过努力上岸华科&#xff0c;初试专业课824信号与系统140&#xff0c;数一130&#xff0c;总分400&#xff0c;对于这个成绩稍微有点超出自己预期&#…

ViT: transformer在图像领域的应用

文章目录 1. 概要2. 方法3. 实验3.1 Compare with SOTA3.2 PRE-TRAINING DATA REQUIREMENTS3.3 SCALING STUDY3.4 自监督学习 4. 总结参考 论文&#xff1a; An Image is Worth 16x16 Words: Transformers for Image Recognition at Scale 代码&#xff1a;https://github.com…

删除windows自带输入法

ctrl shift F 搜狗简繁体切换

【大厂AI课学习笔记】【2.1 人工智能项目开发规划与目标】(4)数据准备的流程

今天学习的是数据准备的流程。 我们已经知道&#xff0c;数据准备占了AI项目超过一半甚至79%的时间。 那么数据准备&#xff0c;都做些什么&#xff0c;有哪些流程。 1.数据采集 观测数据人工收集调查问卷线上数据库 2.数据清洗 有缺失的数据有重复的数据有内容错误的数据…

CSS的注释:以“ /* ”开头,以“ */ ”结尾

CSS的注释:以“ /* ”开头&#xff0c;以“*/”结尾 CSS的注释: 以“ /* ”开头&#xff0c;以“ */ ”结尾 在CSS中&#xff0c;注释是一种非常重要的工具&#xff0c;它们可以帮助开发者记录代码的功能、用法或其他重要信息。这些信息对于理解代码、维护代码以及与他人合作都…

SpringBoot实现OneDrive文件上传

SpringBoot实现OneDrive文件上传 源码 OneDriveUpload: SpringBoot实现OneDrive文件上传 获取accessToken步骤 参考文档&#xff1a;针对 OneDrive API 的 Microsoft 帐户授权 - OneDrive dev center | Microsoft Learn 1.访问Azure创建应用Microsoft Azure&#xff0c;使…

Sora 文生视频提示词实例集 2

Prompt: Historical footage of California during the gold rush. 加利福尼亚淘金热期间的历史影像。 Prompt: A close up view of a glass sphere that has a zen garden within it. There is a small dwarf in the sphere who is raking the zen garden and creating patter…

Ubuntu 20.04 安装RVM

RVM是管理Ruby版本的工具,使用RVM可以在单机上方便地管理多个Ruby版本。 下载安装脚本 首先使下载安装脚本 wget https://raw.githubusercontent.com/rvm/rvm/master/binscripts/rvm-installer 如果出现了 Connection refused 的情况, 可以考虑执行以下命令修改dns,再执…

win10下wsl2使用记录(系统迁移到D盘、配置国内源、安装conda环境、配置pip源、安装pytorch-gpu环境、安装paddle-gpu环境)

wsl2 安装好后环境测试效果如下&#xff0c;支持命令nvidia-smi&#xff0c;不支持命令nvcc&#xff0c;usr/local目录下没有cuda文件夹。 系统迁移到非C盘 wsl安装的系统默认在c盘&#xff0c;为节省c盘空间进行迁移。 1、输出wsl -l 查看要迁移的系统名称 2、执行导出命…

配置oracle连接管理器(cman)

Oracle Connection Manager是一个软件组件&#xff0c;可以在oracle客户端上指定安装这个组件&#xff0c;Oracle连接管理器代理发送给数据库服务器的请求&#xff0c;在连接管理器中&#xff0c;我们可以通过配置各种规则来控制会话访问。 简而言之&#xff0c;不同于专用连接…

c入门第十八篇——支持学生数的动态增长(链表,指针的典型应用)

数组最大的问题&#xff0c;就是不支持动态的扩缩容&#xff0c;它是静态内存分配的&#xff0c;一旦分配完成&#xff0c;其容量是固定的。为了支持学生的动态增长&#xff0c;这里可以引入链表。 链表 在C语言中&#xff0c;链表是一种常用的数据结构&#xff0c;它由一系列…