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] 即为答案。
相关推荐
c++逐梦人1 分钟前
DFS剪枝与优化
算法·深度优先·剪枝
量化炼金 (CodeAlchemy)3 分钟前
【交易策略】基于随机森林的市场结构预测:机器学习在量化交易中的实战应用
算法·随机森林·机器学习
xiaoye-duck13 分钟前
【C++:哈希表】从哈希冲突到负载因子:深入探索开放定址与链地址法的核心机密
数据结构·c++·散列表
coder_Eight15 分钟前
LRU 缓存实现详解:双向链表 + 哈希表
前端·算法
重生之我是Java开发战士20 分钟前
【动态规划】路径问题:不同路径,珠宝的最高价值,下降路径最小和,最小路径和,地下城游戏
算法·游戏·动态规划
小辉同志27 分钟前
739. 每日温度
c++·算法·leetcode
Via_Neo36 分钟前
二进制枚举
数据结构·算法·leetcode
荣光属于凯撒44 分钟前
P3040 [USACO12JAN] Bale Share S
算法·深度优先
kingcjh9744 分钟前
十、RL 算法性能调优指南
深度学习·算法
muls11 小时前
java面试宝典
java·linux·服务器·网络·算法·操作系统