背包问题中的01背包和完全背包
2016-04-13 17:04
260 查看
背包问题(Knapsack problem)
简介:给定N种物品,每件物品有各自的重量Wi,价值Vi,现有一个背包,总容量W,要算出在不超出Wm的情况下,达到最大总价值Vm时各种物品的组合情况。01背包:每种物品只有一件。
完全背包:每种物品有多件,可以反复使用。
基本思路
用每件物品的价值Vi 除以其重量Wi,得到该物品的单位价值,从单位价值高的物品开始选取,若加上第i件物品后重量不超过Wm,则选取该物品,否则判断下一个物品。在重量达到最大或者物品用完后,输出所选择的物品。
代码实现
01背包#include #include #include int main() { int n; double mm,*m,*v,vv=0,k=0; //物品件数 n,容量 mm,总价值 vv,物品重量 m[i],物品价值 v[i] scanf("%lf",&mm); scanf("%d",&n); m=(double *)malloc(n*sizeof(double)); v=(double *)malloc(n*sizeof(double)); int i,j,*pb,y; //pb用来记录该物品编号 double t,*pa; //pa用来记录该物品的单位价值 pa=(double *)malloc(n*sizeof(double)); pb=(int *)malloc(n*sizeof(int)); for(i=0;i
完全背包
完全背包中显示出每种物品用了多少件
#include #include #include int main() { int n; double mm,*m,*v,vv=0,k=0; scanf("%lf",&mm); scanf("%d",&n); m=(double *)malloc(n*sizeof(double)); v=(double *)malloc(n*sizeof(double)); int i,j,*pb,y; double t,*pa; pa=(double *)malloc(n*sizeof(double)); pb=(int *)malloc(n*sizeof(int)); for(i=0;i
相关文章推荐
- Android - Fragments
- JAVA String类
- hihocode #1036 : Trie图
- 1-Nginx 编译安装
- 微软给蓝屏死机画面加了个二维码
- 天池新人实战赛----阿里移动推荐算法大赛(离线赛与平台赛)
- 批量更新时更新分布式ID
- pageX-layerX-clientX-offsetX的区别
- xml文件解析(一)
- iOS开发:MJExtension的简单使用
- iOS网络编程1--简介
- 移动端前端UI库—Frozen UI、WeUI、SUI Mobile
- Java中的int和Integer
- 16进制颜色表
- 消息队列中点对点与发布订阅区别
- UML常用图的几种关系的总结
- -stdcall详解
- Eclipse使用技巧 - 4. Eclipse自动注释文件的导出和导入
- Look-alike技术运用实例:有效实现目标粉丝的“爆炸”
- xml文件解析的几种方式