背包问题是组合优化中的一个经典问题,它属于NP完全问题。简单背包问题可以描述为:给定一组物品,每个物品有一定的价值和重量,和一个背包,背包能承受的最大重量是限定的。目标是选择一组物品放入背包中,使得背包中的物品总价值最大,但总重量不超过背包的容量限制。
问题定义
- 物品集合:有n个物品,每个物品i有相应的价值v[i]和重量w[i]。
- 背包容量:背包可以承受的最大重量为W。
- 目标:选择物品放入背包中,使得背包中物品的总价值最大,同时总重量不超过W。
解决方法
解决简单背包问题的方法有很多,包括贪心算法、动态规划等。
贪心算法
贪心算法按照单位重量价值(价值除以重量)从高到低选择物品,直到无法再添加更多物品为止。这种方法简单,但并不总能得到最优解。
#includeint main() { int v[] = {60, 100, 120}; // 物品价值 int w[] = {10, 20, 30}; // 物品重量 int W = 50; // 背包容量 int n = sizeof(v) / sizeof(v[0]); // 物品数量 int i, j, totalValue = 0, totalWeight = 0; // 按单位重量价值排序 for (i = 0; i < n - 1; i ) { for (j = 0; j < n - i - 1; j ) { if ((double)v[j] / w[j] < (double)v[j 1] / w[j 1]) { // 交换价值和重量 int temp = v[j]; v[j] = v[j 1]; v[j 1] = temp; temp = w[j]; w[j] = w[j 1]; w[j 1] = temp; } } } // 选择物品 for (i = 0; i < n
版权声明:本页面内容旨在传播知识,为用户自行发布,若有侵权等问题请及时与本网联系,我们将第一时间处理。E-mail:284563525@qq.com