C++实现0-1背包问题(含源码)
当我们需要在有限的容量内选取物品来达到最大效益的时候,就可以用到0-1背包问题。以下是C++实现这个问题的代码及相应的描述。
#include <iostream>
using namespace std;
int main()
{
int n, m; //n表示物品数量,m表示背包容量
cin >> n >> m;
int w[n + 1], v[n + 1]; //w表示物品重量,v表示价值
for (int i = 1; i <= n; i++)
cin >> w[i] >> v[i];
int dp[n + 1][m + 1]; //dp数组表示容量为j的背包在前i个物品中所能达到的最大价值
for (int i = 0; i <= n; i++)
{
for (int j = 0; j <= m; j++)
{
if (i == 0 || j == 0)
dp[i][j] = 0;
else if (j >= w[i])
dp[i][j] = max(dp[i - 1][j], dp[i - 1][j - w[i]] + v[i]);
else
dp[i][j] = dp[i - 1][j];
}
}
cout <<
本文介绍了如何使用C++实现0-1背包问题,通过输入物品数量和背包容量,利用动态规划求解在有限容量下选取物品达到最大价值的方案。代码中定义了数组存储物品重量和价值,并通过双重循环计算每个状态下的最优解,最终输出最大价值。
订阅专栏 解锁全文
613

被折叠的 条评论
为什么被折叠?



