21xrx.com
2024-06-03 06:22:13 Monday
登录
文章检索 我的文章 写文章
C++背包问题代码
2023-07-05 07:12:26 深夜i     --     --
C++ 背包问题 代码 动态规划 数组

背包问题是在给定一定的重量和价值的情况下,选择一些物品放置在一个背包中,使得这些物品的总重量不超过背包的重量限制,并且总价值最大化。下面提供了一个C++实现背包问题的代码:

#include

using namespace std;

const int MAX_N=100;//最大物品数

const int MAX_W=1000;//最大背包容量

int w[MAX_N];//物品重量

int v[MAX_N];//物品价值

int dp[MAX_N+1][MAX_W+1];//动态规划数组

int main()

{

  int n,W;//物品数和背包容量

  cin>>n>>W;

  for(int i=0;i

  {

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

  }

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

  {

    for(int j=0;j<=W;j++)

    {

      if(i==0||j==0)//初始化

      {

        dp[i][j]=0;

      }

      else if(w[i-1]>j)//当前物品重量大于背包容量

      {

        dp[i][j]=dp[i-1][j];

      }

      else//当前物品可以放入背包

      {

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

      }

    }

  }

  cout< <

  return 0;//结束程序

}

上面的代码实现了求解背包问题的一个朴素算法,时间复杂度为O(nW),其中n为物品数,W为背包容量。在实际应用中,我们可以通过一些优化技巧(如使用滚动数组、存储空间优化、分组背包等)来提高算法效率,具体可以参考相关的资料和算法书籍。

  
  

评论区

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