【贪心算法】背包问题 C++
2017-11-30 00:52
211 查看
题目
有一个背包,背包容量是M=150。有7个物品,物品可以分割成任意大小。要求尽可能让装入背包中的物品总价值最大,但不能超过总容量。
物品 | A | B | C | D | E | F | G |
---|---|---|---|---|---|---|---|
重量 | 35 | 30 | 60 | 50 | 40 | 10 | 25 |
价值 | 10 | 40 | 30 | 50 | 35 | 40 | 30 |
思路
使用贪心算法,每次选择单位重量价值最高的物品,直至填满背包容量。细节:题中说“物品可以分割成任意大小”,这就意味着背包容量一定可以全部填满。
实现
代码
#include <iostream> #include <algorithm> using namespace std; struct bag { int weight;//总重量 int value;//总价值 float bi;//单位重量的价值 float rate;//使用率:1代表完整放入,小于1代表被分割后放入 } bags[50]; bool compare(const bag &bag1,const bag &bag2) { return bag1.bi>bag2.bi; } int main() { int sum=0,n; float M; int j=0; cout<<"输入背包容量和物品数量:"<<endl; cin>>M>>n; for(int i=0; i<n; i++) { cin>>bags[i].weight>>bags[i].value;//录入物品重量和价值。 bags[i].bi=(float)bags[i].value/bags[i].weight;//计算单位重量价值。 bags[i].rate=0;//初始化每件物品使用率。 } sort(bags,bags+n,compare);//将物品按照单位重量价值由大到小排序 for(j=0; j<n; j++) { if(bags[j].weight<=M) { bags[j].rate=1; sum+=bags[j].weight; M-=bags[j].weight; cout<<"重:"<<bags[j].weight<<"价值:"<<bags[j].value<<"的物品被放入了背包"<<endl<<"放入比例:"&l 4000 t;<bags[j].rate<<endl; } else break; } if(j<n) { bags[j].rate=M/bags[j].weight; sum+=bags[j].rate*bags[j].weight; cout<<"重:"<<bags[j].weight<<"价值:"<<bags[j].value<<"被放入了背包"<<endl<<"放入比例:"<<bags[j].rate<<endl; } return 0; }
运行结果
相关文章推荐
- C++ 贪心算法部分背包问题
- 用贪心算法求解普通背包问题的C++代码
- 贪心算法运用于背包问题(C++实现)
- PAT程序设计考题——甲级1068 (背包问题) C++实现
- 背包问题,动态规划求解,matlab代码,c++代码
- 〖編程·C++〗贪心算法 - 程序最多存储问题
- 一般背包问题的贪心算法
- 【算法】----贪心算法(背包问题)
- 物品无限的背包问题(贪心算法) By ACReaper
- acm-背包问题(贪心算法)
- 算法——贪心算法解0-1背包问题
- 最简单的0-1背包问题c++代码实例及运行结果
- (C++)分支限界法求解背包问题
- JAVA贪心算法实现背包问题
- 经典背包问题(装船问题)C++版
- 贪心算法与活动选择问题 C++实现
- 0022算法笔记——【贪心算法】背包问题,最优装载问题
- 算法导论第16章 贪心算法-0-1背包问题—动态规划求解
- C++实现多目标遗传算法(0/1背包问题)
- 背包问题(贪心算法)