C++背包问题

cpp 复制代码
#include <bits/stdc++.h>
using namespace std;

const int MAXN = 1005;

int N, V;
int w[MAXN], v[MAXN];
int dp[MAXN][MAXN];

int main() {
    cin >> N >> V;
    for (int i = 1; i <= N; ++i) {
        cin >> w[i] >> v[i];
    }
    for (int i = 1; i <= N; ++i) {
        for (int j = V; j >= 1; --j) {
            if (j >= w[i]) {
                dp[i][j] = max(dp[i - 1][j], dp[i - 1][j - w[i]] + v[i]);
            } else {
                dp[i][j] = dp[i - 1][j];
            }
        }
    }
    cout << dp[N][V] << endl;
    return 0;
}

解释:

  1. wv 数组分别表示每个物品的重量和价值。
  2. dp[i][j] 表示前 i 个物品在背包容量为 j 的情况下的最大价值。
  3. 状态转移方程:dp[i][j] = max(dp[i - 1][j], dp[i - 1][j - w[i]] + v[i]),即选择当前物品或不选择当前物品。
  4. 循环遍历每一个物品和每一个背包容量,计算出最大价值。
  5. 输出 dp[N][V] 即为答案。
相关推荐
仰泳的熊猫4 分钟前
LeetCode:268. 丢失的数字
数据结构·c++·算法·leetcode
小龙报20 分钟前
《算法通关指南数据结构和算法篇(3)--- 栈和stack》
开发语言·数据结构·c++·算法·创业创新·学习方法·visual studio
m0_7482336427 分钟前
C++小协程栈和临时变量及作用域的栈溢出问题分析
开发语言·c++
Maple_land1 小时前
内建命令揭秘与环境变量全景:Linux变量体系的完整闭环
linux·运维·服务器·c++·centos
CoovallyAIHub1 小时前
智能“下沉”:边缘AI,更低功耗、更快响应、更强隐私,YOLO26只是开始
深度学习·算法·计算机视觉
oioihoii1 小时前
高性能推理引擎的基石:C++与硬件加速的完美融合
开发语言·c++
Lear2 小时前
【链表】LeetCode 142.环形链表
算法
CoovallyAIHub2 小时前
2025目标检测模型全景图:从RF-DETR到YOLOv12,谁主沉浮?
深度学习·算法·计算机视觉
澪吟2 小时前
算法性能的核心度量:时间复杂度与空间复杂度全解析
数据结构·算法
十五年专注C++开发2 小时前
QRingBuffer:Qt内部高效环形缓冲区
c++·qt·环形缓冲区·qringbuffer