【贪心算法】背包问题 C++
来源:互联网 发布:apache base64 maven 编辑:程序博客网 时间:2024/06/05 14:29
题目
有一个背包,背包容量是M=150。有7个物品,物品可以分割成任意大小。
要求尽可能让装入背包中的物品总价值最大,但不能超过总容量。
思路
使用贪心算法,每次选择单位重量价值最高的物品,直至填满背包容量。
细节:题中说“物品可以分割成任意大小”,这就意味着背包容量一定可以全部填满。
实现
代码
#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<<"放入比例:"<<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;}
运行结果
阅读全文
0 0
- 数据结构(C#)-- 贪心算法解决背包问题
- 背包问题--贪心算法C#Demo解析
- 贪心算法 - 背包问题
- 贪心算法----背包问题
- 【贪心算法】:背包问题
- 贪心算法-背包问题
- 贪心算法 背包问题
- 贪心算法-背包问题
- 【贪心算法】背包问题
- 贪心算法-背包问题
- 贪心算法--背包问题
- 背包问题-贪心算法
- 0-1背包问题-回溯&贪心算法-C#Demo
- C语言之贪心算法(背包问题)
- 背包问题的贪心算法
- 背包问题(贪心算法)
- acm-背包问题(贪心算法)
- 背包问题(贪心算法)
- 什么是数据结构?
- linux add user/ delete user
- 迈开机器学习的第一步
- Material Design设计技巧
- 分布式 tensorflow
- 【贪心算法】背包问题 C++
- qt 开发遇到的坑
- Bagging和Boosting概念以及区别
- ProGuard混淆配置
- Redis源码分析(intset)
- SWP文件详细介绍与利用
- leetCode-Combination Sum III
- Linux安装telnet服务
- php 简单token签权验证