动态规划01背包问题入门学习,详细笔记,推荐阅读
问题描述:
给定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背包问题入门学习,详细笔记,推荐阅读相关推荐
- Spring5学习详细笔记
学习链接 Spring5学习详细笔记 Spring学习总结 - 工厂 第一章 :引言 1. 什么是spring 2. 设计模式 3. 工厂设计模式 3.1 什么是工厂设计模式 3.2 简单工厂的设计 ...
- ROS 初学入门学习及资源推荐
ROS 初学入门学习及资源推荐 1 ROS简介 参考链接: https://baike.baidu.com/item/ros/4710560?fr=aladdin ROS 即 机器人操作系统(Robo ...
- 黑马程序员 c++视频学习详细笔记 下载地址
黑马程序员 c++视频学习详细笔记 下载地址: https://download.csdn.net/download/m0_47891203/84348174 建议结合博主博文学习
- 动态规划—01背包问题
原文作者:弗兰克的猫 原文地址:[动态规划]01背包问题 摘要: 01背包问题:n个物品放入容量为c的背包中. 常见解法: 分治法:递归计算,且存在重复计算的bug 自上而下填表法:从大到小使用递归计 ...
- 动态规划——0-1背包问题
文章出处:极客时间<数据结构和算法之美>-作者:王争.该系列文章是本人的学习笔记. 1 0-1背包问题 背包能够承受的总重量一定w,每个物品的总量不同int[] weight表示.怎么放才 ...
- 动态规划--01背包问题详解
代码随想录day42和day43 动态规划 模块01背包问题 "即使到不了远方,心中也要有远方的模样." 文章目录 1. 01背包理论基础 1.1什么是背包问题 1.2二维dp数组 ...
- Leetcode动态规划——01背包问题
内容参考 https://blog.csdn.net/yoer77/article/details/70943462 https://labuladong.github.io/ebook/动态规划系列 ...
- 动态规划——01背包问题 看此一篇文章就够了
本文讲述经典算法--动态规划的 常见问题 01背包 一篇文章带你学会01背包问题,妈妈再也不担心我遇到01背包了!!! 问题描述 有n个物品,它们有各自的体积和价值,现有给定容量m的背包,如何让背包 ...
- 动态规划---01背包问题(2种方法)
一.动态规划 代表一类问题(最优子结构或子问题最优性)的一般解法,是设计方法或者策略,不是具体算法 本质:递推,核心是找到状态转移的方式,写出dp方程. 解决问题:交叉,重叠子问题(最优子问题) 形式 ...
最新文章
- djangorestframework怎么这么好用!
- 这三个Python小技巧你要知道
- php查询mysql并缓存到redis
- 进击的 Java ,云原生时代的蜕变
- 编码格式经典书籍--代码整洁之道
- python需要的环境_python运行环境是什么
- STM32F407的硬件I2C
- 方向向量转欧拉角_欧拉角、旋转向量和旋转矩阵的相互转换
- 求求你把输入法调小一点... | 今日最佳
- 搭建云计算机win10,win10电脑做云服务器
- python使用turtle步骤_Python+turtle交互式绘图:可以用鼠标拖动的小海龟
- 学习node.js的一些笔记
- linux caffe ssd 编译,Ubuntu 16.04 编译 Caffe SSD
- Vue-Router学习笔记-(黑马视频)
- 2022美国大学生数学建模竞赛(美赛)思路代码
- kwgt公式代码大全_电脑文字识别ocr 数学公式 识别 mathtype
- pthread_sigmask
- 数据结构——二叉树先序、中序、后序及层次四种遍历(C语言版)
- 403 Forbidden nginx/1.6.2
- POJ3295 Tautology
热门文章
- python基本代码教程-python基础教程第三版源代码
- 从零开始学习python编程-从零开始学Python程序设计
- 第I题-生理周期(简单解法跳着试)====人生来就有三个生理周期,分别为体力、感情和智力周期,它们的周期长度为23天、28天和33天。每一个周期中有一天是高峰。在高峰这天,
- windows安装vnm
- react中将html字符串渲染到页面
- 用jQuery做点击下箭头改变方向
- 微信自定义菜单java_使用Java语言开发微信公众平台(八)——自定义菜单功能
- LeetCode 123买卖股票的时机 III
- 如何解决 Nginx 端口映射到外网后访问地址端口丢失的问题
- setwindowpos怎么改变z序_Windows转Mac——操作习惯的改变!