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

题解:AcWing 3 完全背包问题

【题目来源】

AcWing:3. 完全背包问题 - 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

【输出样例】

10

【算法标签】

《AcWing 3 完全背包问题》 #背包问题# #DP#

【代码详解】

/*
1. 01背包: f[i][j] = max(f[i-1][j], f[i-1][j-v]+w);
2. 完全背包: f[i][j] = max(f[i-1][j], f[i][j-v]+w);
*/
// 朴素版本
#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];}// 动态规划填表// 外层循环:遍历每件物品for (int i = 1; i <= n; i++){// 内层循环:遍历背包容量for (int j = 1; j <= m; j++){// 1. 不选第i件物品f[i][j] = f[i - 1][j];// 2. 如果可以选第i件物品(当前容量j ≥ 物品i的重量v[i])if (j >= v[i]){// 选择第i件物品// 注意:这里是f[i][j-v[i]],不是f[i-1][j-v[i]]// 因为完全背包中,每件物品可以选无限次f[i][j] = max(f[i][j], f[i][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];}// 动态规划填表// 外层循环:遍历每件物品for (int i = 1; i <= n; i++){// 内层循环:正向遍历背包容量// 必须从小到大遍历,允许每个物品被选多次for (int j = v[i]; j <= m; 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
10
http://www.jsqmd.com/news/399133/

相关文章:

  • 瑞祥商联卡别闲置!新回收渠道来啦 - 京顺回收
  • 2026更新版!10个降AI率网站测评:专科生降AI率必备工具推荐
  • 真心不骗你 9个AI论文写作软件测评:自考毕业论文+开题报告高效工具推荐
  • Python基于Vue的 中小学生辅导平台django flask pycharm
  • 题解:质数和分解
  • 干货合集:AI论文平台 千笔写作工具 VS Checkjie,研究生专属写作神器!
  • 题解:P9265 [PA 2022] Chodzenie po linie
  • 导师又让重写?8个降AIGC工具测评:本科生如何高效降AI率过关?
  • 少走弯路:9个AI论文平台深度测评,研究生毕业论文写作必备工具推荐
  • 《投资-403》价值低估与价值变低,一字之差,含义千差万别,完全相反!前者是机会,后者是陷阱;前者是黄金坑,后者是无底洞!市面上大部分是无底洞,少部分是黄金坑。
  • 2026干冷器选购攻略:口碑与实力并存的厂商,空调机组/表冷器/乏风取热箱/空气幕/工业暖风机,干冷器实力厂家排行 - 品牌推荐师
  • 2025年高位货架厂家排行榜,实力口碑双认证,仓储货架承重/仓库货架摆放标准要求/仓储重型货架品牌排名高位货架源头厂家哪个好 - 品牌推荐师
  • 2025年市面上有名的酒店隔断设计哪家好,办公室隔断墙/办公隔断/自由组合隔断/电控玻璃隔断,酒店隔断定制怎么选择 - 品牌推荐师
  • 小学生兴趣班选购指南:不同目标下的机构推荐与课程分析 - 品牌测评鉴赏家
  • 题解:AcWing 1365 子集的和
  • 孩子想学人工智能:从兴趣启蒙到系统编程的机构与课程全面对比 - 品牌测评鉴赏家
  • 2026无锡紧固件生产厂家推荐,品质铸就品牌,涂胶/螺栓/非标螺丝/紧固件/标准件/螺丝/螺母,紧固件厂家联系方式 - 品牌推荐师
  • Python基于Vue的中医药健康科普信息系统-学习产生积分兑换商品 django flask pycharm
  • Python基于Vue的充电桩智能管理系统 django flask pycharm
  • 地理探测器和 GEO-SHAP 的应用场景讲解
  • 深度学习中的“dropout”(随机失活)正则化是什么意思?
  • 2026国内权威一站式专利代办网站,规模大的都在这!专利复审审查/个人专利代办/专利改写降重,专利代办网站怎么选 - 品牌推荐师
  • root@DESKTOP-PSN4LOR:~# 从 root 用户切换到你自己创建的普通用户 例如 itheima@DESKTOP-Q89USRE:~$ - Jacky
  • OpenClaw架构(2)- Agent as Resource
  • TCP交错传输多通道实现原理
  • 原生中文 + 全离线 + 极简部署,PicoClaw 让 OpenClaw/NanoBot 瞬间不香了
  • 《信号与系统》多项式拟合与傅里叶级数拟合的对比,各自的物理含义,应用场合、优缺点等
  • 题解:砝码称重
  • 深度测评一键生成论文工具 千笔 VS 灵感风暴AI
  • droop+SVPWM,基于I型NPC三电平逆变器,下垂控制与SVPWM混合控制,采用电压电流...