当前位置: 首页 > news >正文

题解:AcWing 2 01背包问题

【题目来源】

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

【题目描述】

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

\(i\) 件物品的体积是 \(v_i\),价值是 \(w_i\)

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

【输入】

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

接下来有 \(N\) 行,每行两个整数 \(v_i,w_i\),用空格隔开,分别表示第 \(i\) 件物品的体积和价值。

【输出】

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

【输入样例】

4 5
1 2
2 4
3 4
4 5

【输出样例】

8

【算法标签】

《AcWing 2 01背包问题》 #背包问题# #DP#

【代码详解】

// 朴素解法
#include <bits/stdc++.h>
using namespace std;const int N = 1005;  // 最大物品数和背包容量
int n, m;            // n: 物品数量, m: 背包容量
int v[N], w[N];      // v[i]: 第i件物品的重量, w[i]: 第i件物品的价值
int f[N][N];         // f[i][j]: 前i件物品,总重量不超过j的最大价值int main()
{// 输入物品数量和背包容量cin >> n >> m;// 输入每件物品的重量和价值// 注意:物品编号从1开始,方便理解for (int i = 1; i <= n; i++){cin >> v[i] >> w[i];  // 输入第i件物品的重量和价值}// 动态规划填表// i: 考虑前i件物品// j: 当前背包可用容量for (int i = 1; i <= n; i++)  // 遍历每件物品{for (int j = 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;return 0;
}
// 一维数组优化版
#include <bits/stdc++.h>
using namespace std;const int N = 1005;  // 最大物品数和背包容量
int n, m;            // n: 物品数量, m: 背包容量
int v[N], w[N];      // v[i]: 第i件物品的重量, w[i]: 第i件物品的价值
int f[N];            // f[j]: 容量为j时的最大价值(优化为一维数组)int main()
{// 输入物品数量和背包容量cin >> n >> m;// 输入每件物品的重量和价值// 注意:物品编号从1开始,方便理解for (int i = 1; i <= n; i++){cin >> v[i] >> w[i];  // 输入第i件物品的重量和价值}// 动态规划填表// 外层循环:遍历每件物品for (int i = 1; i <= n; i++){// 内层循环:反向遍历背包容量// 必须从大到小遍历,确保每个物品只被选一次for (int j = 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;return 0;
}

【运行结果】

4 5
1 2
2 4
3 4
4 5
8
http://www.jsqmd.com/news/399083/

相关文章:

  • 2026年广州路易威登手表维修推荐:多中心服务对比排名,针对网点覆盖与响应效率痛点 - 十大品牌推荐
  • 深度测评 9个AI论文软件:MBA毕业论文与科研写作必备工具推荐
  • 学霸同款 9个AI论文写作软件测评:本科生毕业论文+科研写作必备工具推荐
  • 高端腕表维修哪个好?2026年广州罗杰杜彼手表维修推荐与排名,应对复杂机芯与网点服务痛点 - 十大品牌推荐
  • 导师严选!最受喜爱的AI论文平台 —— 千笔AI
  • 手表维修中心哪家强?2026年广州美度手表维修推荐与排名,聚焦服务标准化与质保痛点 - 十大品牌推荐
  • 2026年广州雷达手表维修推荐:多场景售后中心深度评价,针对网点覆盖与效率痛点 - 十大品牌推荐
  • 如何甄别可靠手表维修点?2026年浪琴维修中心排名与推荐,规避非官方服务风险 - 十大品牌推荐
  • 2026年广州蕾蒙威手表维修推荐:多中心横向对比评价,针对走时与保养核心痛点指南 - 十大品牌推荐
  • 手表维修如何避坑?2026年理查米尔手表维修推荐与评价指南 - 十大品牌推荐
  • 广州劳力士维修哪家强?2026年广州劳力士手表维修推荐与排名,解决网点与服务痛点 - 十大品牌推荐
  • 如何选择手表维修站?2026年广州孔雀表维修推荐与排名,直击网点分散与售后隐忧 - 十大品牌推荐
  • 2026年广州朗格手表维修推荐:多场景服务评价,针对售后时效与网点覆盖痛点指南 - 十大品牌推荐
  • 如何选择可靠维修点?2026年广州康斯登手表维修推荐与排名,直击服务质量痛点 - 十大品牌推荐
  • 如何选择可靠维修点?2026年广州卡地亚手表维修评测与推荐,直击非官方服务信任痛点 - 十大品牌推荐
  • 2026年广州卡西欧手表维修推荐:基于技术特性与合规标准评测,附服务网点排名 - 十大品牌推荐
  • 闲置的银座购物卡在哪里回收便捷靠谱? - 抖抖收
  • 新手也能上手 8个降AI率工具测评:研究生专属降AI率指南
  • 2026年广州海瑞温斯顿手表维修推荐:基于技术特性与合规标准评价,针对复杂机芯维修痛点 - 十大品牌推荐
  • 新型航空撤离舱哪家强?2026年实力厂家解析,市面上撤离舱联系电话精选优质品牌助力工程采购 - 品牌推荐师
  • 如何选择可靠维修点?2026年广州积家手表维修推荐与评测,解决技术资质与透明度痛点 - 十大品牌推荐
  • 2026年广州江诗丹顿手表维修推荐:高端腕表养护排名,涵盖日常与应急维修场景痛点 - 十大品牌推荐
  • 2026年市场正规的球阀品牌排行榜,气动闸阀/手动闸阀/升降止回阀/截止阀/蝶阀/硬密封蝶阀/手动蝶阀,球阀制造商排行 - 品牌推荐师
  • 2026年育肥牛料供应厂家精选,品质饲料有保障,反刍饲料/牛羊饲料/犊牛羔羊料/妊娠料/育肥猪料,育肥牛料品牌口碑推荐 - 品牌推荐师
  • 2026年广州爵尼表手表维修推荐:多场景服务评价,针对售后时效与网点覆盖痛点 - 十大品牌推荐
  • 2026年广州精工手表维修推荐:专业维修中心横向评测,聚焦服务透明度与网点便利性 - 十大品牌推荐
  • 2026年广州豪度手表维修推荐:严选非官方服务站点排名,涵盖日常保养与应急维修场景 - 十大品牌推荐
  • 手表维修中心哪家强?2026年广州豪利时维修服务推荐与排名,聚焦售后保障痛点 - 十大品牌推荐
  • 亲测好用!圈粉无数的AI论文软件 —— 千笔·专业学术智能体
  • 如何选择可靠的手表维修点?2026年广州汉米尔顿手表维修推荐与评测,直击售后保障与网点便利性痛点 - 十大品牌推荐