21xrx.com
2024-05-20 15:46:48 Monday
登录
文章检索 我的文章 写文章
【代码分享】01背包问题的C++实现
2023-07-02 08:59:08 深夜i     --     --
01背包问题 C++ 实现 代码分享

在算法学习中,01背包问题是一个非常经典且重要的问题。在计算机程序设计中,01背包问题也是一个常见的应用场景。本文将介绍如何使用C++来实现01背包问题,并且分享代码。如果您不懂算法,可以先了解01背包问题的基础知识。

01背包问题是指一个背包容量有限,需要从一堆物品中选取部分物品装入背包,每个物品只能选择一次,而且每个物品都有一个体积和一个价值,问在不超过背包容量的前提下,最多可以装入多少价值的物品。

下面是01背包问题的C++实现代码:


#include<bits/stdc++.h>

using namespace std;

const int MAXN = 1005;

int V, n; // V代表背包容量,n代表物品数

int f[MAXN]; // f[i]表示容量为i的背包的最大价值

int v[MAXN], w[MAXN]; // 分别表示物品的体积和价值

int main()

{

  cin >> V >> n;

  for(int i = 1; i <= n; i++)

    cin >> v[i] >> w[i];

  memset(f, 0, sizeof(f));

  for(int i = 1; i <= n; i++)

  {

    for(int j = V; j >= v[i]; j--)

    {

      f[j] = max(f[j], f[j-v[i]]+w[i]);

    }

  }

  cout << f[V] << endl;

  return 0;

}

代码中使用了动态规划的思想,时间复杂度为O(V*n),空间复杂度为O(V)。程序输入首先需要输入背包容量和物品数,然后分别输入n个物品的体积和价值。接着,使用两个循环进行背包问题求解。该程序使用了一个一维数组f[i],表示容量为i的背包所能装入的最大价值。当遍历到第i个物品时,使用一个循环将该物品装入不同容量的背包中,求出它们所能装的最大价值,并更新f数组即可。

总之,01背包问题是一个非常实用的算法,在计算机程序设计中也有很多应用。如果您需要编写相关应用,可以参考以上C++代码来实现。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复