《数据结构与算法》课程设计
18、背包问题
问题描述:
有n个物品,第i个物品的价值为V[i],重量为W[i],背包的最大容量为m。求在不超过背包容量的条件下,背包里装的物品价值最大。
实现要求:
建立物品的数据结构,根据贪心策略和动态规划实现
#include<iostream>
#include<algorithm>
using namespace std;
const int maxn = 100; //物品最大件数
const int maxv = 1000; //V 的上限
int w[maxn], c[maxn], dp[maxv];
int main() {
int n, V;
scanf("%d%d", &n, &V);
for (int i = 1; i <= n; i++) { //输入商品的重量
scanf("%d", &w[i]);
}
for (int i = 1; i <= n; i++) { //输入商品的价值
scanf("%d", &c[i]);
}
for (int v = 0; v <= V; v++) { //边界
dp[v] = 0;
}
for (int i = 1; i <= n; i++) {
for (int v = V; v >= w[i]; v--) {
dp[v] = max(dp[v], dp[v - w[i]] + c[i]); //状态转移方程
}
}
int max = 0;
for (int v = 0; v <= V; v++) { //寻找 dp[0...V] 中最大的即为答案
if (dp[v] > max) {
max = dp[v];
}
}
printf("%d\n", max); //输出最大价值
return 0;
}

本文探讨了数据结构与算法课程中的背包问题,通过贪心策略和动态规划方法解决物品选择问题,目标是在不超过背包容量的情况下,最大化物品总价值。代码实例展示了如何使用C++编程实现这一经典问题。
5497

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



