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] 即为答案。
相关推荐
小辉同志7 小时前
Epoll+线程池
开发语言·c++·c·线程池·epoll
史迪仔01127 小时前
[QML] Qt Quick Dialogs 模块使用指南
开发语言·前端·c++·qt
Chase_______7 小时前
LeetCode 1456:定长子串中元音的最大数目
算法·leetcode
小O的算法实验室7 小时前
2026年IEEE IOTJ,DNA序列启发相似性驱动粒子群算法+无人机与基站部署,深度解析+性能实测
算法·论文复现·智能算法·智能算法改进
谭欣辰7 小时前
Floyd算法:动态规划解最短路径
c++·算法·图论
计算机安禾7 小时前
【Linux从入门到精通】第12篇:进程的前后台切换与信号控制
linux·运维·算法
6Hzlia7 小时前
【Hot 100 刷题计划】 LeetCode 84. 柱状图中最大的矩形 | C++ 两次单调栈基础扫法
c++·算法·leetcode
小苗卷不动7 小时前
OJ刷题之栈和排序(中等)
c++
沫璃染墨7 小时前
重生之我要手写 C++ list:从底层结构到 const 迭代器与迭代器失效全解
开发语言·c++
C雨后彩虹7 小时前
文件目录大小
java·数据结构·算法·华为·面试