以下是用C++语言写的01背包问题代码:

#include <iostream>
using namespace std;

const int MAXN = 1000; // 最大物品数量
const int MAXV = 1000; // 最大背包容量

int N, V; // 物品数量、背包容量
int w[MAXN], v[MAXN]; // 物品重量、价值
int dp[MAXV+1]; // 背包容量为 i 时的最大价值

int main()
{
    // 输入物品数量和背包容量
    cin >> N >> V;

    // 输入每个物品的重量和价值
    for (int i = 1; i <= N; i++) {
        cin >> w[i] >> v[i];
    }

    // 初始化 dp 数组
    for (int i = 0; i <= V; i++) {
        dp[i] = 0;
    }

    // 动态规划求解
    for (int i = 1; i <= N; i++) {
        for (int j = V; j >= w[i]; j--) {
            dp[j] = max(dp[j], dp[j-w[i]] + v[i]);
        }
    }

    // 输出结果
    cout << dp[V] << endl;

    return 0;
}

代码思路:

  1. 首先输入物品数量和背包容量,以及每个物品的重量和价值。
  2. 初始化 dp 数组为 0。
  3. 从第一个物品开始,依次计算每个物品加入背包时的最大价值。
  4. 最后输出 dp[V],即背包容量为 V 时的最大价值。

动态规划状态转移方程:dp[j] = max(dp[j], dp[j-w[i]] + v[i])。

其中,dp[j] 表示背包容量为 j 时的最大价值;w[i] 表示第 i 个物品的重量;v[i] 表示第 i 个物品的价值。

用C++语言写一段01背包问题的代码

原文地址: https://www.cveoy.top/t/topic/b3tC 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录