21xrx.com
2025-03-29 21:11:14 Saturday
文章检索 我的文章 写文章
C++实现背包问题的代码
2023-07-03 10:15:15 深夜i     12     0
C++ 背包问题 代码

背包问题是一个经典的计算机科学问题,它描述了一个有限容量的背包如何装载价值最大的物品。C++是一种强大的编程语言,其语法和数据结构使我们能够很容易地实现背包问题。

下面是一个C++实现背包问题的代码示例:

#include<bits/stdc++.h>
using namespace std;
int main() {
  int capacity,n; //capacity表示背包容量,n表示可选物品的数量
  cout<<"请输入背包容量:";
  cin>>capacity;
  cout<<"请输入物品数量:";
  cin>>n;
  int weight[n], value[n]; //分别表示可选物品的重量和价值
  cout<<"请输入物品重量和价值:";
  for(int i=0;i<n;i++)
    cin>>weight[i]>>value[i];
  int dp[n+1][capacity+1]; //动态规划数组,dp[i][j]表示考虑前i个物品,在容量为j的背包中所能获取的最大价值
  memset(dp, 0, sizeof(dp));
  for (int i = 1; i <= n; i++) {
    for (int j = 1; j <= capacity; j++) {
      if (weight[i-1] > j) //装不下第i个物品,最大价值等于前i-1个的最大价值
        dp[i][j] = dp[i-1][j];
      else //能装下第i个物品,加入与不加入两种情况中取最大值
        dp[i][j] = max(dp[i-1][j],value[i-1] + dp[i-1][j-weight[i-1]]);
    }
  }
  cout<<"在容量为"<<capacity<<"的背包中所能获取的最大价值为"<<dp[n][capacity]<<endl;
  return 0;
}

这段代码使用了一个二维数组dp来存储动态规划的结果,代码中的注释解释了每行代码的含义和作用。通过该示例,我们可以很清晰地看到C++的语法和数据结构是如何用于实现背包问题的。

总之,C++是一种非常适合实现计算机科学问题的语言,包括背包问题等经典问题。通过学习和熟练掌握C++,我们可以更深入地理解和应用计算机科学的相关知识。

  
  

评论区