说明:假设有一个背包的负重最多可达8公斤,而希望在背包中装入负重范围内可得之总价物品,假设是水果好了,水果的编号、单价与重量如下所示:

0 李子 4KG NT$4500
1 苹果 5KG NT$5700
2 橘子 2KG NT$2250
3 草莓 1KG NT$1100
4 甜瓜 6KG NT$6700

解法:背包问题是关于最佳化的问题,要解最佳化问题可以使用「动态规划」(Dynamic programming),从空集合开始,每增加一个元素就先求出该阶段的最佳解,直到所有的元素加 入至集合中,最后得到的就是最佳解。 以背包问题为例,我们使用两个阵列value与item,value表示目前的最佳解所得之总价,item表 示最后一个放至背包的水果,假设有负重量 1~8的背包8个,并对每个背包求其最佳解。 逐步将水果放入背包中,并求该阶段的最佳解: 放入李子 在背包负重8公斤时,最多可以装入9050元的水果,而最后一个装入 的 水果是3号,也就是草莓,装入了草莓,背包只能再放入7公斤(8-1)的水果,所以必须看背 包负重7公斤时的最佳解,最后一个放入的是2号,也就 是橘子,现在背包剩下负重量5公斤(7- 2),所以看负重5公斤的最佳解,最后放入的是1号,也就是苹果,此时背包负重量剩下0公斤(5- 5),无法 再放入水果,所以求出最佳解为放入草莓、橘子与苹果,而总价为9050元。

#include <stdio.h>
#include <stdlib.h>
#define LIMIT 8 // 重量限制
#define N 5 // 物品种类
#define MIN 1 // 最小重量
struct body {char name[20];int size;int price;
};
typedef struct body object;
int main(void) {int item[LIMIT+1] = {0};int value[LIMIT+1] = {0};int newvalue, i, s, p;object a[] = {{"李子", 4, 4500},{"苹果", 5, 5700},{"橘子", 2, 2250},{"草莓", 1, 1100},{"甜瓜", 6, 6700}};for(i = 0; i < N; i++) {for(s = a[i].size; s <= LIMIT; s++) {p = s - a[i].size;newvalue = value[p] + a[i].price;if(newvalue > value[s]) {// 找到阶段最佳解value[s] = newvalue;item[s] = i;}}}printf("物品\t价格\n");for(i = LIMIT; i >= MIN; i = i - a[item[i]].size) {printf("%s\t%d\n",a[item[i]].name, a[item[i]].price);}printf("合计\t%d\n", value[LIMIT]);return 0;
}

背包问题(Knapsack Problem)相关推荐

  1. JavaScript实现Knapsack problem背包问题算法(附完整源码)

    JavaScript实现Knapsack problem背包问题算法(附完整源码) Comparator.js完整源代码 Sort.js完整源代码 MergeSort.js完整源代码 Knapsack ...

  2. 动态规划法(四)0-1背包问题(0-1 Knapsack Problem)

      继续讲故事~~   转眼我们的主人公丁丁就要离开自己的家乡,去大城市见世面了.这天晚上,妈妈正在耐心地帮丁丁收拾行李.家里有个最大能承受20kg的袋子,可是妈妈却有很多东西想装袋子里,已知行李的编 ...

  3. Dynamic Programming 01 —knapsack problem(动态规划背包问题)

    首先引入动态变化的含义:为什么要有动态规划? Introduction: 从斐波那契函数的递归中我们发现,在例子求fib(7)的过程中,我们需求得fib(5)和fib(6),而我们在求fib(6)的时 ...

  4. C#,背包问题(Knapsack Problem)贪心算法的源代码

    背包问题(KnapSack Problem)的相关算法是常用的规划算法. 一.什么是背包问题? 背包的问题是,你有一个"袋子",可以装有限数量的物品,鉴于你有一组物品可以从每个物品 ...

  5. Python多维约束(重量+体积+次数)背包问题(Knapsack Problem)

    问题描述:1.一个背包,往里装东西,物品重量w(weight)对应为[2,3,4,7] ,价值va(value)对应为[1,4,7,12] ,如果你的最大承重为20,每个物品可装次数不限,求你能装入背 ...

  6. Knapsack Problem

    背包九讲 0-1 knapsack problem 01背包-牛客网 已知一个背包最多能容纳体积之和为V的物品,现有 n 个物品,第 i 个物品的体积为 vi , 重量为 wi,求当前背包最多能装多大 ...

  7. [Algorithmic Toolbox学习笔记][week6]0/1 Knapsack Problem

    问题描述 具体的问题描述请参考以下链接: [Algorithmic Toolbox学习笔记][week3]战利品的最大价值_Karen_AMPM的博客-CSDN博客假设小偷有一个背包只能放下一定重量的 ...

  8. 背包问题(Knapsack problem)采用动态规划求解

    问题说明: 假设有一个背包的负重最多可达8公斤,而希望在背包中装入负重范围内可得之总价物 品,假设是水果好了,水果的编号.单价与重量如下所示: 0 李子 4KG NT$4500 1 苹果 5KG NT ...

  9. Knapsack Problem(0-1背包问题)

    0-1背包问题,是说给定 n 个物体,每个物体都有一定的重量和价值,再给一个能容纳最大重量为 w 的背包.求从 n 个物体中选出若干个放到背包中,在所选物体总重量不超过 w 的情况下,所选物体的总价值 ...

  10. FZU 2214 Knapsack problem(背包问题)

    Description 题目描述 Given a set of n items, each with a weight w[i] and a value v[i], determine a way t ...

最新文章

  1. 重新编号_武汉黄陂公交线路PW、PG、PZ……分不清?别急,就要重新编号啦
  2. j2me手机游戏结构分析和实际小例子系列一 游戏背景和游戏精灵
  3. 学习MongoDB(三) Add an Arbiter to Replica Set 集群中加入仲裁节点
  4. C++ 空间配置器(allocator)
  5. java-mail.jar_mail.jar-Mail.jar下载 --pc6下载站
  6. 花里胡哨的c语言程序,通达信花里胡哨主图公式源码
  7. Intellij IDEA中程序播放音乐 没声音
  8. SSD网络及代码理解
  9. python表示倍数_python代表倍数
  10. 戴尔服务器安全模式进不去系统,无法进入系统win10戴尔电脑如何进入安全模式...
  11. 泰勒级数(Taylor Series)和利用python计算自然常数
  12. 寒假ACM假期总结 (7)
  13. 学生动物网页设计模板下载 大学生宠物HTML网页制作作品 简单宠物狗网页设计成品 dreamweaver学生网站模板
  14. 门禁系统服务器需要什么要求,完备的门禁系统应该具有这些功能
  15. Python爬虫——爬取IEEE论文
  16. 软件测试自我评价范文,软件测试工程师自我评价范文
  17. JavaScript常用技巧:stroage封装
  18. 【React函数的柯里化】4、什么?这玩意儿不仅能装x,还能优化代码?
  19. 一只小蜜蜂...(递推求解)
  20. Android 自动亮度

热门文章

  1. 化工机械基础复习要点
  2. linux bonding 技术
  3. 设置Outlook关闭但不退出程序
  4. C++11线程池探索
  5. webuploader 批量上传图片+参数上传完整解决方案
  6. 前端还是后端,该怎么选择
  7. 晨读美文推荐【英文悦读】-《a day so happy》
  8. 数据结构-复杂度(一)
  9. jQuery_03_操作HTML和CSS
  10. 神经网络 mask的作用