问题描述:

给定N种物品和一个背包。物品i的重量是Wi,其价值位Vi ,背包的容量为C。问应该如何选择装入背包的物品,使得转入背包的物品的总价值为最大??

在选择物品的时候,对每种物品i只有两种选择,即装入背包或不装入背包。不能将物品i装入多次,也不能只装入物品的一部分。因此,该问题被称为0-1背包问题。

建议读者可以先把代码段复制在devc++编辑器上,再手机打开csdn保存图片阅读,创作不易,您的每一个点赞,关注,评论都是对作者的最大支持,谢谢。

#include<stdio.h>
int V[200][200];//前i个物品装入容量为j的背包中获得的最大价值
int max(int a,int b)//比较两个数大小的自定义子函数
{if(a>=b)return a;else return b;
}int KnapSack(int n,int w[],int v[],int x[],int C)//KnapSack英文名为背包,我称它为背包函数
{//n是输入的物品数 w是物品重量数组 v是物品价值数组 x是用于判断拿取物品的数组 C为背包最大容纳量  int i,j;//填表,其中第一行和第一列全为0 for(i=0;i<=n;i++)V[i][0]=0;for(j=0;j<=C;j++)V[0][j]=0;for(i=1;i<=n;i++){printf("%d  %d  %d  ",i,w[i-1],v[i-1]);for(j=1;j<=C;j++){if(j<w[i-1]) //背包装不下物品的第一种情况 {V[i][j]=V[i-1][j];printf("[%d][%d]=%2d  ",i,j,V[i][j]);}else//背包能够装下当前物品,但还需要考虑  拿 与  不拿  的两种情况 {//核心思想 背包的状态转换方程 V[i][j]=max(V[i-1][j],V[i-1][j-w[i-1]]+v[i-1]);printf("[%d][%d]=%2d  ",i,j,V[i][j]);}}printf("\n");}//判断哪些物品被选中j=C;for(i=n;i>=1;i--)//用标记的方法判断物品是否被装入背包 {if(V[i][j]>V[i-1][j]){x[i]=1;j=j-w[i-1];}elsex[i]=0;}printf("选中的物品是:\n");for(i=1;i<=n;i++)printf("%d ",x[i]);printf("\n");return V[n][C];}void main()
{int s;//获得的最大价值int w[15];//物品的重量int v[15];//物品的价值int x[15];//物品的选取状态int n,i;int C;//背包最大容量n=5;printf("请输入背包的最大容量:\n");scanf("%d",&C);printf("输入物品数:\n");scanf("%d",&n);printf("请分别输入物品的重量:\n");for(i=0;i<n;i++)scanf("%d",&w[i]);printf("请分别输入物品的价值:\n");for(i=0;i<n;i++)scanf("%d",&v[i]);s=KnapSack(n,w,v,x,C);printf("最大物品价值为:\n");printf("%d\n",s);}

转载:学习(18条消息) 动态规划解0-1背包问题(C语言版)_baidu_20363843的博客-CSDN博客_0-1背包问题c语言

动态规划01背包问题入门学习,详细笔记,推荐阅读相关推荐

  1. Spring5学习详细笔记

    学习链接 Spring5学习详细笔记 Spring学习总结 - 工厂 第一章 :引言 1. 什么是spring 2. 设计模式 3. 工厂设计模式 3.1 什么是工厂设计模式 3.2 简单工厂的设计 ...

  2. ROS 初学入门学习及资源推荐

    ROS 初学入门学习及资源推荐 1 ROS简介 参考链接: https://baike.baidu.com/item/ros/4710560?fr=aladdin ROS 即 机器人操作系统(Robo ...

  3. 黑马程序员 c++视频学习详细笔记 下载地址

    黑马程序员 c++视频学习详细笔记 下载地址: https://download.csdn.net/download/m0_47891203/84348174 建议结合博主博文学习

  4. 动态规划—01背包问题

    原文作者:弗兰克的猫 原文地址:[动态规划]01背包问题 摘要: 01背包问题:n个物品放入容量为c的背包中. 常见解法: 分治法:递归计算,且存在重复计算的bug 自上而下填表法:从大到小使用递归计 ...

  5. 动态规划——0-1背包问题

    文章出处:极客时间<数据结构和算法之美>-作者:王争.该系列文章是本人的学习笔记. 1 0-1背包问题 背包能够承受的总重量一定w,每个物品的总量不同int[] weight表示.怎么放才 ...

  6. 动态规划--01背包问题详解

    代码随想录day42和day43 动态规划 模块01背包问题 "即使到不了远方,心中也要有远方的模样." 文章目录 1. 01背包理论基础 1.1什么是背包问题 1.2二维dp数组 ...

  7. Leetcode动态规划——01背包问题

    内容参考 https://blog.csdn.net/yoer77/article/details/70943462 https://labuladong.github.io/ebook/动态规划系列 ...

  8. 动态规划——01背包问题 看此一篇文章就够了

    本文讲述经典算法--动态规划的 常见问题 01背包  一篇文章带你学会01背包问题,妈妈再也不担心我遇到01背包了!!! 问题描述 有n个物品,它们有各自的体积和价值,现有给定容量m的背包,如何让背包 ...

  9. 动态规划---01背包问题(2种方法)

    一.动态规划 代表一类问题(最优子结构或子问题最优性)的一般解法,是设计方法或者策略,不是具体算法 本质:递推,核心是找到状态转移的方式,写出dp方程. 解决问题:交叉,重叠子问题(最优子问题) 形式 ...

最新文章

  1. djangorestframework怎么这么好用!
  2. 这三个Python小技巧你要知道
  3. php查询mysql并缓存到redis
  4. 进击的 Java ,云原生时代的蜕变
  5. 编码格式经典书籍--代码整洁之道
  6. python需要的环境_python运行环境是什么
  7. STM32F407的硬件I2C
  8. 方向向量转欧拉角_欧拉角、旋转向量和旋转矩阵的相互转换
  9. 求求你把输入法调小一点... | 今日最佳
  10. 搭建云计算机win10,win10电脑做云服务器
  11. python使用turtle步骤_Python+turtle交互式绘图:可以用鼠标拖动的小海龟
  12. 学习node.js的一些笔记
  13. linux caffe ssd 编译,Ubuntu 16.04 编译 Caffe SSD
  14. Vue-Router学习笔记-(黑马视频)
  15. 2022美国大学生数学建模竞赛(美赛)思路代码
  16. kwgt公式代码大全_电脑文字识别ocr 数学公式 识别 mathtype
  17. pthread_sigmask
  18. 数据结构——二叉树先序、中序、后序及层次四种遍历(C语言版)
  19. 403 Forbidden nginx/1.6.2
  20. POJ3295 Tautology

热门文章

  1. python基本代码教程-python基础教程第三版源代码
  2. 从零开始学习python编程-从零开始学Python程序设计
  3. 第I题-生理周期(简单解法跳着试)====人生来就有三个生理周期,分别为体力、感情和智力周期,它们的周期长度为23天、28天和33天。每一个周期中有一天是高峰。在高峰这天,
  4. windows安装vnm
  5. react中将html字符串渲染到页面
  6. 用jQuery做点击下箭头改变方向
  7. 微信自定义菜单java_使用Java语言开发微信公众平台(八)——自定义菜单功能
  8. LeetCode 123买卖股票的时机 III
  9. 如何解决 Nginx 端口映射到外网后访问地址端口丢失的问题
  10. setwindowpos怎么改变z序_Windows转Mac——操作习惯的改变!