什么叫贪心算法:

贪心算法就是遵循某种既定原则,不断地选取当前条件下最优的选择来构造每一个子步骤的解决方案,直到获得问题最终的求解。即在对问题求解时,总是做出在当前看来是最好的选择,也就是说,不从整体最优上加以考虑,所做的仅是在某种意义上的局部最优解。

贪心算法适合解决的问题:

1.背包问题(注意0-1背包问题不能用贪心算法解决,所得到的解通常不是最优解)
背包问题与0-1背包问题的区别就是背包问题能将物品的部分放入到背包中,而0-1背包问题只有将物品整个放入或者不放入。
0-1背包问题求解可以用动态规划以及回溯法解决
2.其余几个示例可以参照以下链接
贪心算法及几个经典例子

贪心算法值背包问题

问题描述:
有一个背包,背包容量是M=45。有5个物品,物品可以分割成任意大小。
要求尽可能让装入背包中的物品总价值最大,但不能超过总容量。
物品 A B C D E
重量 4 40 6 5 2
价值 20 40 30 20 10

1.贪心选择:本题有7个物品,要使装入到背包中的物品的总价值最大,又不能超过它的容量,就需要选取单位价值最大的物品放入,这是本题的贪心选择思想
2.首先用w[]数组记录下5个产品的重量,再用v[]数组记录下5个产品的价值,然后在不超过背包容量的基础上将物品放入背包中,可以值放入一部分。

具体实现代码:

//贪心算法解决背包问题
#include<stdio.h>
#include<stdlib.h>
int main(){int w[5];//5个物品的重量 int v[5];//5个物品的价值,默认价值不会为0double d[5];//存储5个物品的单位价值int c =45;int k; printf("请输入5个物品的重量:");for(int i=0;i<5;i++){scanf("%d",&w[i]);} printf("请输入5个物品的价值:");for(int i=0;i<5;i++){scanf("%d",&v[i]);} for(int i=0;i<5;i++){d[i] =v[i]/w[i];}  while(c>0){int max = 0;//轮替的在d[]中找最大值 for(int i=0;i<5;i++){if(max<d[i]){max = d[i];k=i;}}d[k] = 0;if(c>=w[k]){printf("重量为%d,价值为%d的物品被放入了包中!\n",w[k],v[k]);c=c-w[k];}else{double a = c*1.0/w[k];printf("重量为%d,价值为%d的物品的%.1f被放入了包中!\n",w[k],v[k],a);c=-1;}
}
return 0;
}

运行结果


以上就是背包问题的解题过程!谢谢

数学建模之贪心算法(背包问题)相关推荐

  1. 数学建模_数学模型的分类数学建模十大算法

    数学模型的分类 数学建模十大算法 1.蒙特卡罗算法 (该算法又称随机性模拟算法, 是通过计算机仿真来解决问题的算法, 同时可以 通过模拟可以来检验自己模型的正确性,比较好用的算法) 2.数据拟合.参数 ...

  2. 贪心算法 背包问题 java_贪心算法求解背包问题

    一.贪心算法 1.贪心算法概念 贪婪算法(Greedy algorithm)是一种对某些求最优解问题的更简单.更迅速的设计技术.用贪婪法设计算法的特点是一步一步地进行,常以当前情况为基础根据某个优化测 ...

  3. 【数学建模】模拟退火算法(最优化)

    文章目录 一.算法介绍 1. 退火 2.物理退火 3.模拟退火算法思想 二.适用问题 三.算法总结 1. 步骤 四.应用场景举例 五.MATLAB代码 六.实际案例 七.论文案例片段(待完善) 模拟退 ...

  4. 数学建模—编程手算法学习路线(自用)

    算法目录 1.评价算法 适用情景 常用算法: 层次分析法 TOPSIS法 数据包络法 2.预测算法 适用情景 常用算法: 灰色预测模型 微分方程预测 回归分析预测 马尔科夫预测 时间序列预测(必须掌握 ...

  5. 算法设计与分析——贪心算法——背包问题

    0-1背包问题: 前提:给定n种物品和一个背包.物品i的重量是Wi,其价值为Vi,背包的容量为C. 问题:应如何选择装入背包的物品,使得装入背包中物品的总价值最大? 背包问题: 与0-1背包问题类似, ...

  6. 贪心算法 背包问题代码 c语言,用贪心算法求解普通背包问题的C++代码

    用贪心算法求解普通背包问题的C++代码 2019年3月6日 125次阅读 来源: 贪心算法 #include #define  M  100 void display(int &n,doubl ...

  7. 【数学建模】聚类算法+Spss实现+Matlab代码实现

    文章目录 一.聚类算法原理 二.Spss实现聚类 三.Matlab实现聚类 图片来源于清风老师视频 b站地址:数学建模学习交流 一.聚类算法原理 二.Spss实现聚类 三.Matlab实现聚类 1.创 ...

  8. 数学建模--蚁群算法

    数学建模常用的优化算法有蚁群算法. 首先学习资料: 网站:慕课数学建模在线课程 课件:链接:https://pan.baidu.com/s/1-bhmFZl7yM4-5JL__fzkLw 提取码:4s ...

  9. 数学建模竞赛常用算法介绍及对应国赛获奖论文分类整理分享

    数学建模竞赛中应当掌握的算法: 数学建模国赛每年的题型都类似,除非是个人专业性很强,否则作者不太建议选择华为出的题,剩余的题型每年都类似,是有迹可循的,毕竟站在巨人的肩膀上看的更远.下面就介绍一些数模 ...

  10. 【githubboy】数学建模学习资源,包含数学建模相关的算法、LaTeX 论文模板、算法思维导图

    在 GitHub 开源了数学建模学习资源,主要包含数学建模相关的竞赛优秀论文.算法.LaTeX 论文模板.算法思维导图.书籍.Matlab 教程等内容. GitHub:github.com/zhanw ...

最新文章

  1. Java 匿名类也能使用构造函数
  2. PCA、碎石图、PCA+正确的维度个数、增量PCA(IncrementalPCA)、随机PCA(Randomized PCA)、KernelPCA
  3. leetcode算法题--石子游戏 II★★
  4. QLibrary 动态加载外部库文件
  5. 中国移动互联网2018年度报告:八大关键词总结与十大趋势
  6. 聚焦国际农民丰收节贸易会-张桃林:农业谋定开放新格局
  7. 一张小票看透支付清结算架构
  8. android listview settag,Android View中setTag的二三事
  9. Android开发之运行客户的Demo拿不到数据
  10. go 连接服务器 并存放图片_基于 Go 语言开发在线论坛(二):通过模型类与MySQL数据库交互...
  11. 使用grunt运行hintjs任务
  12. [转载] Comet:基于 HTTP 长连接的“服务器推”技术
  13. 小白Linux入门之:终端复用器Tmux使用参考
  14. asp探针,php探针,jsp探针
  15. Kettle工具简单使用(spoon)
  16. android截屏保存目录,Android实现截屏,将截图文件保存到本地文件夹
  17. 【老九学堂】【Java】初级编码规范
  18. win11(amd)+cuda+cudnn+pytorch安装过程
  19. 在C#中设置打印机纸张大小
  20. 第二节 构成人体必需的营养素

热门文章

  1. python list转json对象_将列表转换为json对象
  2. VC++实现快速截屏
  3. 2018年最新税收分类编码_如何免费在线进行2018年税收
  4. win10超好看的鼠标主题,你也来试试吧
  5. 兄弟连Linux ppt笔记
  6. Eclipse安装SVN插件和svn连接器
  7. 疑难杂症 | Win10解压文件后乱码
  8. GaMD-高斯加速分子动力学模拟中文教程
  9. 汉字转拼音(较完整)
  10. 图书管理系统基于MYSQL