1.题目描述:——背包问题

有若干物品,每种物品的价值和重量各不相同,将物品装入一个容量有限的背包,如何选择装入的物品,使背包的价值最大。

2.题目分析:

要是背包中的物品价值最大,则需要在有限的重量中尽可能装入价值更大的物品,基于这种思想则采取贪心算法
       首先计算物品的单位价值,即价值/重量,根据单位价值对物品进行排序,优先装入单位价值高的物品,直至背包装满。

3.代码实现:

#include <stdio.h>
int n;//物品数量
double c;//背包容量
double v[999];//物品的价值
double w[999];//物品的重量
double cw = 0.0;//背包重量
double cp = 0.0;//背包价值
double bestp = 0.0;//当前最优价值
double perp[999];//物品性价比排序
int order[100];//物品编号
int put[100];//装入标识
void sort()
{int i,j;int temporder = 0;double temp= 0.0;for(i=1;i<=n;i++)perp[i]=v[i]/w[i];for(i=1;i<=n-1;i++){for(j=i+1;j<=n;j++)if(perp[i]<perp[j])//冒泡排序perp[],order[],sortv[],sortw[]{temp = perp[i];perp[i]=perp[j];perp[j]=temp;temporder=order[i];order[i]=order[j];order[j]=temporder;temp = v[i];v[i]=v[j];v[j]=temp;temp=w[i];w[i]=w[j];w[j]=temp;}}
}
void backtrack(int i)
{double bound(int i);if(i>n){bestp = cp;return;}if(cw+w[i]<=c){cw+=w[i];cp+=v[i];put[i]=1;backtrack(i+1);cw-=w[i];cp-=v[i];}if(bound(i+1)>bestp)backtrack(i+1);
}
double bound(int i)
{double leftw= c-cw;double b =cp;while(i<=n&&w[i]<=leftw){leftw-=w[i];b+=v[i];i++;}if(i<=n)b+=v[i]/w[i]*leftw;return b;
}
int main()
{int i;printf("请输入物品的数量和容量:");scanf("%d%lf",&n,&c);for(i=1;i<=n;i++){printf("第%d个物品的重量和价值:",i);scanf("%lf %lf",&w[i],&v[i]);order[i]=i;}sort();backtrack(1);printf("最大价值为:%lf\n",bestp);printf("装入的物品次序为:");for(i=1;i<=n;i++){if(put[i]==1)printf("%d ",order[i]);}return 0;
}

【C语言】——背包问题详解相关推荐

  1. c语言背包问题装字母,C语言动态规划之背包问题详解

    01背包问题 给定n种物品,和一个容量为C的背包,物品i的重量是w[i],其价值为v[i].问如何选择装入背包的物品,使得装入背包中的总价值最大?(面对每个武平,只能有选择拿取或者不拿两种选择,不能选 ...

  2. python语言编程基础-Python语言入门详解!快速学成Python!

    原标题:Python语言入门详解!快速学成Python! 很多技能是被职场所需要的,但很可惜... 这些技能在大学中并学习不到. 大学和职场现实存在的横沟对大部分同学来说难以跨越或碰得头破血流... ...

  3. python语言入门m-Python语言入门详解!快速学成Python!

    今日主题 "Python语言入门详解" 近两年来,Python语言借着数据科学和人工智能的"东风"成为了最流行的编程语言--街头巷尾人们口口相传.同时,Pyth ...

  4. C语言之详解#ifdef等宏

    C语言之详解#ifdef等宏 这几个宏是为了进行条件编译.一般情况下,源程序中所有的行都参加编译.但是有时希望对其中一部分内容只在满足一定条件才进行编译,也就是对一部分内容指定编译的条件,这就是&qu ...

  5. c语言 宏教程 pdf,C语言之详解_ifdef等宏.pdf

    C 语言之详解 #ifdef 等宏 指令用途 #空指令,无任何效果 #include 包含一个源代码文件 #define 定义宏 #undef 取消已定义的宏 #if 如果给定条件为真,则编译下面代码 ...

  6. 代码检查规则:Python语言案例详解

    在之前的文章中代码检查规则:Java语言案例详解学习了Java的检查规则.我们今天将学习<代码检查规则:Python语言案例详解>,内容主要分为两个部分:Python的代码检查规则和Pyt ...

  7. 代码检查规则:Java语言案例详解

    本节课程为<代码检查规则:Java语言案例详解>, 通常情况下Java的代码检查规则可以分为以下十类: 接下来,让我们具体来看看每个分类的内容. 一.源文件规范 该类规范主要从文件名.文件 ...

  8. Linux_arm_启动_c语言部分详解,[原创]Linux arm 启动 c语言部分详解第四讲

    Linux arm启动c语言部分详解第四讲(from setup_per_cpu_areas();) Written by leeming 上面的setup_arch花了我们大量的篇幅,现在我们要继续 ...

  9. c 语言中 %是什么运算符,C 语言基础----详解C中的运算符

    C语言中又有哪些运算符呢? 如下所示: ※ 算术运算符 ※ 赋值运算符 ※ 关系运算符 ※ 逻辑运算符 ※ 三目运算符 C语言基本算术运算符如下表: 除法运算中注意: 如果相除的两个数都是整数的话,则 ...

  10. python切片输出_Python语言之详解切片

    本篇文章主要讲述Python语言之详解切片,希望阅读本篇文章以后大家有所收获,帮助大家对相关内容的理解更加深入. 切片操作就是对list,元组,字符串进行截取操作有了切片操作,很多地方循环就不再需要了 ...

最新文章

  1. Windows和Virtualbox虚拟机之间拷贝文件
  2. 走近人脸检测:从VJ到深度学习(下)
  3. 用JAVA制作微型操作系统4月23日情况
  4. oracle无监听程序的解决方法(PLSQL)Oracle ORA12514 监听程序当前无法识别连接描述符中请求的服务...
  5. Linux线上环境部署zabbix,CentOS 7.3下Zabbix 4.0监控环境安装部署
  6. Python学习 - 常用模块(二)
  7. 用机器指令和汇编指令编程(修改版)
  8. bzoj2299 [HAOI2011]向量 结论 裴蜀定理
  9. (转)Spring Boot (十四): Spring Boot 整合 Shiro-登录认证和权限管理
  10. 【目标检测】目标检测中的多尺度检测(Multi-Scale),FPN,RPN
  11. pytest-fixture
  12. 1.安装编译软件(keil)
  13. 读书笔记:调试软件 张银奎
  14. 三段式状态机_verilog
  15. 超高精度时间频率同步及其应用
  16. Scratch编程初体验-小猫跳舞
  17. 表示身体各部位的英语单词
  18. Xmind 8 安装及破解方法
  19. 单证管理外贸软件解决方案
  20. 【工作效率提升】Search Everything 下载安装

热门文章

  1. python官方文档中文版下载,python官方手册中文pdf
  2. 微信小程序开发之——模板
  3. PowerShell Gallery .nupkg手动下载将.nupkg文件重命名为.zip,然后将内容提取到本地文件夹中
  4. Java集合详解(超详细)
  5. JAVA集合和guava集合使用和原理解析
  6. SQL中常用的日期函数
  7. 【预测模型-ELAMN预测】基于哈里斯鹰算法优化ELMAN神经网络实现数据回归预测matlab代码
  8. MYSQL ALTER命令
  9. 2019eclipse 中文汉化包 安装教程
  10. 推荐一些好用的Chrome插件