news 2026/6/16 20:17:24

题解:AcWing 2 01背包问题

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
题解:AcWing 2 01背包问题

本文分享的必刷题目是从蓝桥云课洛谷AcWing等知名刷题平台精心挑选而来,并结合各平台提供的算法标签和难度等级进行了系统分类。题目涵盖了从基础到进阶的多种算法和数据结构,旨在为不同阶段的编程学习者提供一条清晰、平稳的学习提升路径。

欢迎大家订阅我的专栏:算法题解:C++与Python实现!

附上汇总贴:算法竞赛备考冲刺必刷题(C++) | 汇总


【题目来源】

AcWing:2 01背包问题 - AcWing题库

【题目描述】

N NN件物品和一个容量是V VV的背包。每件物品只能使用一次。

i ii件物品的体积是v i v_ivi,价值是w i w_iwi

求解将哪些物品装入背包,可使这些物品的总体积不超过背包容量,且总价值最大。
输出最大价值。

【输入】

第一行两个整数,N , V N,VN,V,用空格隔开,分别表示物品数量和背包容积。

接下来有N NN行,每行两个整数v i , w i v_i,w_ivi,wi,用空格隔开,分别表示第i ii件物品的体积和价值。

【输出】

输出一个整数,表示最大价值。

【输入样例】

4 5 1 2 2 4 3 4 4 5

【输出样例】

8

【算法标签】

#01背包

【代码详解】

// 朴素解法#include<bits/stdc++.h>usingnamespacestd;constintN=1005;// 最大物品数和背包容量intn,m;// n: 物品数量, m: 背包容量intv[N],w[N];// v[i]: 第i件物品的重量, w[i]: 第i件物品的价值intf[N][N];// f[i][j]: 前i件物品,总重量不超过j的最大价值intmain(){// 输入物品数量和背包容量cin>>n>>m;// 输入每件物品的重量和价值// 注意:物品编号从1开始,方便理解for(inti=1;i<=n;i++){cin>>v[i]>>w[i];// 输入第i件物品的重量和价值}// 动态规划填表// i: 考虑前i件物品// j: 当前背包可用容量for(inti=1;i<=n;i++)// 遍历每件物品{for(intj=0;j<=m;j++)// 遍历所有可能的背包容量{// 不选第i件物品的情况f[i][j]=f[i-1][j];// 如果能选第i件物品(当前容量j ≥ 物品i的重量v[i])if(j>=v[i]){// 选择第i件物品的情况// 价值 = 不选第i件物品时的价值 + 第i件物品的价值// 容量 = 当前容量j - 物品i的重量v[i]f[i][j]=max(f[i][j],f[i-1][j-v[i]]+w[i]);}}}// 输出结果:前n件物品,背包容量为m时的最大价值cout<<f[n][m]<<endl;return0;}
// 一维数组优化版#include<bits/stdc++.h>usingnamespacestd;constintN=1005;// 最大物品数和背包容量intn,m;// n: 物品数量, m: 背包容量intv[N],w[N];// v[i]: 第i件物品的重量, w[i]: 第i件物品的价值intf[N];// f[j]: 容量为j时的最大价值(优化为一维数组)intmain(){// 输入物品数量和背包容量cin>>n>>m;// 输入每件物品的重量和价值// 注意:物品编号从1开始,方便理解for(inti=1;i<=n;i++){cin>>v[i]>>w[i];// 输入第i件物品的重量和价值}// 动态规划填表// 外层循环:遍历每件物品for(inti=1;i<=n;i++){// 内层循环:反向遍历背包容量// 必须从大到小遍历,确保每个物品只被选一次for(intj=m;j>=v[i];j--){// 状态转移方程:// 1. 不选第i件物品:f[j]保持不变// 2. 选第i件物品:f[j - v[i]] + w[i]f[j]=max(f[j],f[j-v[i]]+w[i]);}}// 输出结果:容量为m时的最大价值cout<<f[m]<<endl;return0;}

【运行结果】

4 5 1 2 2 4 3 4 4 5 8
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/16 20:13:22

云服务器开发与SSH

1. 什么是云服务器&#xff1f;通俗解释&#xff1a;你现在为了解决“自己电脑没显卡”无法训练&#xff0c;但是需要一台高性能计算机帮助你给你提供条件进行训练。这时候&#xff0c;你可以去云服务器提供商租借一台配置了顶级 RTX 4090 显卡的电脑。云服务器&#xff0c;就是…

作者头像 李华
网站建设 2026/6/16 20:10:52

词袋模型BOW原理与工业级实战:从文本向量化到可解释分类

1. 什么是词袋模型&#xff08;Bag-of-Words&#xff0c;BOW&#xff09;&#xff1f;它到底在解决什么问题&#xff1f;如果你刚接触自然语言处理&#xff0c;看到“Bag-of-Words”这个词&#xff0c;第一反应可能是&#xff1a;“这不就是把一堆词随便装进麻袋里吗&#xff1…

作者头像 李华
网站建设 2026/6/16 20:01:52

.NET Upgrade Assistant:从传统框架到现代平台的快速迁移指南

.NET Upgrade Assistant&#xff1a;从传统框架到现代平台的快速迁移指南 【免费下载链接】modernize-dotnet A tool to assist developers in upgrading .NET Framework applications to .NET 6 and beyond 项目地址: https://gitcode.com/gh_mirrors/up/modernize-dotnet …

作者头像 李华
网站建设 2026/6/16 20:00:27

MATLAB fminbnd函数:一维优化算法原理与工程实践指南

1. 项目概述&#xff1a;fminbnd是什么&#xff0c;以及我们为什么需要它在工程计算、数据分析乃至金融建模的日常工作中&#xff0c;我们常常会遇到一个看似简单却令人头疼的问题&#xff1a;如何找到一个单变量函数在某个区间内的最低点&#xff1f;这个“最低点”在数学上被…

作者头像 李华
网站建设 2026/6/16 19:59:55

MainsailOS:终极3D打印机控制系统的完整搭建指南

MainsailOS&#xff1a;终极3D打印机控制系统的完整搭建指南 【免费下载链接】MainsailOS This Raspberry Pi distribution for managing Klipper 3D printers with Mainsail provides all you need. 项目地址: https://gitcode.com/gh_mirrors/ma/MainsailOS 想要快速搭…

作者头像 李华
网站建设 2026/6/16 19:56:12

如何用 ChatGPT 辅助写文献综述,而不是编造文献?

这篇文章会围绕一个科研人最常见、也最危险的 AI 使用场景展开&#xff1a;让 AI 帮你写文献综述&#xff0c;究竟是在提升效率&#xff0c;还是在制造“看起来像真的”学术幻觉&#xff1f;文献综述是科研写作中最容易“看起来顺、实际上错”的部分。 因为它不仅要求语言流畅&…

作者头像 李华