0 1背包问题(dp)c语言,DP实例之01背包问题C语言实现
问题描述:
有N件物品和一个容量为V的背包。第i件物品的费用是c[i],价值是w[i]。求解将哪些物品装入背包可使这些物品的费用总和不超过背包容量,且价值总和最大。这是最基础的背包问题,特点是:每种物品仅有一件,可以选择放或不放。
用子问题定义状态:即f[i][v]表示前i件物品恰放入一个容量为v的背包可以获得的最大价值。则其状态转移方程便是:f[i][v]=max{f[i-1][v],f[i-1][v-c[i]]+w[i]}。
用二维数组记录每个子问题的值,避免重复计算,行从0到N,列从0到V。f[][0]=0,f[0][]=0;
很容易算出01背包的时间和空间复杂度,O(V*N)。
C语言代码实现如下:
int Bag()
{
int i,j;
int num=4; //有4个物品
int vol=10; //背包容量为10
int w[5]={0,3,1,4,3}; //此处需要多添加一个首元素元素0,因为下面的循环从1开始,若不添加0,则i-1会出现数组越界
int v[5]={0,1,3,4,2};//此处需要多添加一个首元素元素0,因为下面的循环从1开始,若不添加0,则i-1会出现数组越界
int f[5][11]={0}; //用来保存结果 ,以上几个数组长度都比num,vol多一个
for(i=1;i<=num;i++) //状态方程
{
for(j=1;j<=vol;j++)
{
if (w[j]>j) //如果第i个物品放不进背包
f[i][j]=f[i-1][j];
else if(f[i-1][j]>(f[i-1][j-w[i]]+v[i])) //状态方程 取max{f[i-1][v],f[i-1][v-c[i]]+w[i]}
f[i][j]=f[i-1][j];
else
f[i][j]=f[i-1][j-w[i]]+v[i];
}
}
return f[4][10];
}
0 1背包问题(dp)c语言,DP实例之01背包问题C语言实现相关推荐
- 代码随想录算法训练营第四十二天 | 01背包问题,你该了解这些、01背包问题,你该了解这些 滚动数组、 416. 分割等和子集
打卡第42天,搞搞01背包. 今日任务 01背包问题,你该了解这些! 01背包问题,你该了解这些! 滚动数组 416.分割等和子集 背包问题1.0 :0-1 背包 有n件物品和一个最多能背重量为w 的 ...
- 0-1背包问题 动态规划c语言,详解动态规划01背包问题--JavaScript实现
一开始在接触动态规划的时候,可能会云里雾里,似乎能理解思路,但是又无法准确地表述或者把代码写出来.本篇将一步一步通过作图的方式帮助初次接触动态规划的同学来理解问题.这一篇将以经典的 01背包 问题为例 ...
- 分支限界法 01背包c语言,算法笔记分支限界法01背包问题
<算法笔记分支限界法01背包问题>由会员分享,可在线阅读,更多相关<算法笔记分支限界法01背包问题(12页珍藏版)>请在人人文库网上搜索. 1.问题描述给定n种物品和一背包.物 ...
- 代码随想录算法训练营第四十二天-动态规划4|● 01背包问题,你该了解这些! ● 01背包问题,你该了解这些! 滚动数组 ● 416. 分割等和子集
今天只有1道题,属于动态规划的01背包问题的应用.首先理解一下动态规划的01背包问题.推荐一个视频,动态规划DP0-1背包,这是我认为讲得最为通透的.很多讲解动态背包问题的,一上来就画二维表格,遍历背 ...
- ppt模板员工管理系统c语言,[PPT模板]第01章c语言.ppt
[PPT模板]第01章c语言 1.1C语言出现的历史背景 1.C语言的诞生与发展 (1)在C语言诞生以前,系统软件主要是用汇编语言编写的.由于汇编语言程序依赖于计算机硬件,其可读性和可移植性都很差:但 ...
- 读书笔记--GO语言精进之路--01熟知GO语言的一切
文章目录 前言 作者写这本书的目的 作者的解答思路 1. Go语言的诞生 2. Go语言的设计哲学 2.1 追求简单,少即是多 2.2 偏好组合,正交解耦 2.3 原生并发,轻量高效 2.4 面向工程 ...
- C语言初阶学习-----01初识C语言
这是初识C语言,对有一定基础的同学帮助很大,看不懂的到以后对应的章节会详细介绍. 1.数据类型 char //字符数据类型 short //短整型 int //整形 long //长整型 long l ...
- java蛮力法背包问题_蛮力法、动态规划法 求解01背包问题
V(i,j)= (2) max{V(i-1,j),V(i-1,j-wi)+vi} j>=w 2)复杂度分析:2n 三.程序伪码: (1)Brute Force: Algorithm MFKnap ...
- 狂补dp Atcoder Educational DP Contest(全)
狂补dp Atcoder Educational DP Contest(全) 注意 为了减少篇幅,本博客代码部分只放主代码部分,其余省略快读.快输.头文件等代码,即把代码看做伪代码更佳 A - Fro ...
- C语言经典实例:1-10例:三角求和、显示所占字节数、自增自减运算while语句输出最小值、计算快递费用、学生成绩统计
文章目录 C语言经典实例:1-10例:三角求和.显示所占字节数.自增自减运算while语句输出最小值.计算快递费用.学生成绩统计等 1.程序的编写工具 2.项目的创建 3.C语言经典实例1-10编写的 ...
最新文章
- UI设计培训:UI设计师离不开的基本版式设计
- 百度地图设置div样式宽高为百分比不显示地图
- 使用VS搭建三层结构
- /lib64/libc.so.6 is not a symbolic link 解决方法
- 浏览器渲染引擎学习总结
- 海量数据处理分析_BI
- python 读取sqlite存入文件_如何通过python读取sqlite数据文件
- 2017.9.5 postgresql加密函数的使用
- SAP License:结算金额大于可支配金额问题应对
- 高通骁龙888开始被Linux内核5.12版正式支持
- 压缩文件中文件名乱码问题
- 计算机老出现无法响应,我的电脑老是会未响应_电脑软件总是未响应
- Android 获取经纬度。2018年写
- android 小米8底部有一大片黑色
- 移动的宽带特别不好用,非常卡,怎么回事?
- cad图文档管理系统,图文档查找困难解决方法
- 13、hive在启动beeline客户端时报错:User: xxx is not allowed to impersonate xxx
- 常用数据库的基因ID
- 来搞清楚CRC校验的原理和实现
- python数学知识_【数学知识】高一的集合知识的Python编程实现
热门文章
- python 英语翻译 excel_Excel自动翻译
- StringUtil.isEmpty()和StringUtil.isBlank()的区别
- cad立面索引符号 规范_园林景观设计规范——园林人都该知道!
- Ubuntu安装rz sz
- nupkg 本地安装_使用Nuget安装离线包nupkg
- python中聚类和分类的区别_聚类与分类有什么区别?
- 旋转矩阵中6保6_双色球旋转矩阵公式中6保4的
- 基于51单片机的电池过压欠压报警电路protues仿真
- mysql 取首字母_MySQL中获取拼音首字母的方法
- 淘宝京东拼多多淘客源码,三合一淘客php源码cms搭建教程