21xrx.com
2024-12-22 21:58:35 Sunday
登录
文章检索 我的文章 写文章
C++实现背包问题的代码
2023-07-03 10:15:15 深夜i     --     --
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++,我们可以更深入地理解和应用计算机科学的相关知识。

  
  

评论区

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