物品/容量

0

1

2

3

4

5

6

7

8

9

10

11

0/w=0

0

0

0

0

0

0

0

0

0

0

0

0

1/w=1

0

1

1

1

1

1

1

1

1

1

1

1

2/w=2

0

1

6

7

7

7

7

7

7

7

7

7

3/w=5

0

1

6

7

7

18

19

24

25

25

25

25

4/w=6

0

1

6

7

7

18

22

24

28

29

29

40

5/w=7

0

1

6

7

7

18

22

28

29

34

35

40

价值v[]={0,1,6,18,22,28}

重量w[]={0,1,2,5,6,7}

背包容量T=11

上面是求最大价值公式,不是很容易看懂

下面图文是具体求最大价值的步骤:

c语言实现

动态规划-递归方法

自顶向下

#include <stdio.h>//0-1背包问题#define N 6  //
#define maxT 100
int c[N][maxT] = {0};int Memoized_Knapspsack(int v[N], int w[N], int T);
int Calculate_Max_Value(int v[N], int w[N], int i, int j);
/*
T: 背包容量
v[]:价值数组
w[]:重量数组
c[][]:c[i][j]表示前i个物品在背包容量为j的情况下最优装包方案所能获得的最大价值
*/
int Memoized_Knapspsack(int v[N], int w[N], int T){int i,j;for (i = 0; i < N; i++){for (j = 0; j < T; j++){c[i][j] = -1;}}return Calculate_Max_Value(v, w, N-1, T);}int Map_Knapspsack(int v[N], int w[N], int T){int i,j;for (i = 0; i < N; i++){for (j = 0; j < T+1; j++){printf("%2d   ", Calculate_Max_Value(v, w, i, j));}printf("\n");}}int Calculate_Max_Value(int v[N], int w[N], int i, int j){int temp = 0;if(i == 0 || j == 0){c[i][j] = 0;}else{c[i][j] = Calculate_Max_Value(v, w, i-1, j);  //1.if(i > 0 && j >= w[i]){  //当j < w[i]时c[i][j]一定是等于c[i-1][j]temp = Calculate_Max_Value(v, w, i-1, j-w[i]) + v[i];  //2.if(temp > c[i][j]){c[i][j] = temp;  //3.}}}return c[i][j];
}int main(void){int v[] = {0,1,6,18,22,28};int w[] = {0,1,2,5,6,7};int T = 11;int result = Memoized_Knapspsack(v, w, T);printf("最大价值 = %d\n", result);Map_Knapspsack(v, w, T);return 0;
}

结果

0-1背包问题-c语言实现相关推荐

  1. 回溯法经典例题--0/1背包问题--C语言

    问题描述:         设n个物品的编号为0~n-1,重量和价值分别用数组w[]与v[]存放,背包限制重量用W表示,X[]存放最优解,x[i]的值为0.1分别表示物品i不在.在背包内. 求解:   ...

  2. C语言动态规划法解决0/1背包问题(详细解答)

    动态规划法解决0/1背包问题(详细解答) 首先让我们回顾一下动态规划法的使用规则: 一..动态规划法的实现思路: 1.划分子问题:将元问题分解为若干个子问题,每一个子问题对应一个决策,并且子问题之间具 ...

  3. 0/1背包问题——动态规划、回溯、分支限界法对比

    0/1背包问题--动态规划.回溯.分支限界法对比 2017.12.19 20:42:02 字数 3713 阅读 2820 目录 1.问题描述 1.1 问题描述 1.2 问题的数学表示(规划类问题,此种 ...

  4. 数据挖掘SPSS Clementine 12.0.3 多国语言(含中文)破解版

    数据挖掘SPSS Clementine 12.0.3 多国语言(含中文)破解版 2013-01-11 13:05 2111人阅读 评论(0) 收藏 举报 本文章已收录于: 分类: 数据挖掘(3) 作者 ...

  5. 0/1背包问题——动态规划方法

    1.定义 动态规划:把多阶段过程转化为一系列单阶段问题,利用各阶段之间的关系,逐个求解. 2.求解步骤 (1)找到状态转化条件 (2)归纳状态转移方程 (3)定义初始条件值 3.实例解析--0/1背包 ...

  6. 0/1背包问题-----回溯法求解

    问题描述 有n个物品和一个容量为c的背包,从n个物品中选取装包的物品.物品i的重量为w[i],价值为p[i].一个可行的背包装载是指,装包的物品总重量不超过背包的重量.一个最佳背包装载是指,物品总价值 ...

  7. 0/1背包问题-----动态规划求解

    问题描述 有n个物品和一个容量为c的背包,从n个物品中选取装包的物品.物品i的重量为w[i],价值为p[i].一个可行的背包装载是指,装包的物品总重量不超过背包的重量.一个最佳背包装载是指,物品总价值 ...

  8. 《计算复杂性:现代方法》——0.2 判定问题/语言

    本节书摘来自华章计算机<计算复杂性:现代方法>一书中的第0章,第0.2节,作者 [美]桑杰夫·阿罗拉(Sanjeev Arora),博阿兹·巴拉克(Boaz Barak),译 骆吉洲,更多 ...

  9. JSP2.0中的表达式语言(EL表达式)

    转载自   JSP2.0中的表达式语言(EL表达式) EL语法 EL的语法很简单,他最大的特点就是使用上很方便  例:  ${sessionScope.user.sex}  所有EL都是以${ 为起始 ...

  10. 【动态规划】0/1背包问题

    问题 H: [动态规划]0/1背包问题 时间限制: 1 Sec  内存限制: 64 MB 提交: 152  解决: 95 [提交] [状态] [讨论版] [命题人:admin] 题目描述 张琪曼和李旭 ...

最新文章

  1. 研究生失联19天,父母焦急求助!最后竟然是在写博士研究计划......
  2. 自控力极差的人如何自救?两个方法战胜拖延!
  3. AT4120-[ARC096D]Sweet Alchemy【贪心,背包】
  4. 检测Maven依赖中介
  5. 移动开发在路上-- IOS移动开发系列 多线程一 [转]
  6. 消息队列面试 - 如何进行消息队列架构设计?
  7. 使用NPM和Nodejs编写编译工具
  8. UI-148xLE-M相机参数
  9. K-Java WAP浏览器
  10. 无线网络管理工具wifi hoper在win7上的安装方法及推荐软件inSSIDer
  11. 70.(cesium之家)cesium接入天地图影像与注记(经纬度)
  12. 使用keycloak自定义SPI接入外部用户登录
  13. wg运行内存装MySQL8_搭建Mysql-proxy实现主从同步读写分离
  14. Win10 笔记本 共享 wifi 热点
  15. LabVIEW播放提示声音或者音乐
  16. Linux安装 CentOS 7
  17. Java 验证回文串
  18. Matlab中ind2gray函数用法
  19. 【CYH-01】小奔的国庆练习赛:赛后标程
  20. 高考完当天,你做的第一件事是什么?

热门文章

  1. win7卡在正在启动windows界面_重装win7系统到启动/开机画面就死机解决措施
  2. 《硬核干货》简单好用视频、图片、文件MD5值修改工具类
  3. iterm2 配置安装rz sz
  4. IP地址中,A、B、C三类地址的区别
  5. java用dda算法绘制直线_使用DDA算法画出给定两点的直线
  6. 怎样把图片转换成线条图?
  7. 计算机dll修复工具,DLL修复工具有哪些?DLL修复工具盘点
  8. 云计算的应用解决方案
  9. 飞机大战素材素材素材
  10. Android 反编译修改源码