贪心算法实例
来源:互联网 发布:淘宝客服简历模板 编辑:程序博客网 时间:2024/04/19 00:43
题目:有m元钱,n种物品;每种物品有j磅,总价值f元,可以使用0到f的任意价格购买相应磅的物品,例如使用0.3f元,可以购买0.3j磅物品。要求输出用m元钱最多能买到多少磅物品。
算法思想:本例基于贪心思想,我们每次都尽可能的多买性价比高的物品直到该物品被买完或者金钱耗尽。
实现过程:每次都买剩余物品中性价比(即重量价格比)最高的物品,直到该物品被买完或者钱被耗尽。若该物品已经被买完,则我们继续在剩余的物品中寻找性价比最高的物品,重复该过程;若金钱耗尽,则交易结束。
源代码
#include<stdio.h>#include<algorithm>using namespace std;struct goods{//表示可买物品的结构体double j;//该物品总重double f;//该物品总价值double s;//该物品性价比bool operator <(const goods &A)const{//重载小于运算符,确保可用sort函数将数组按照性价比降序排列return s>A.s;}}buf[1000];int main(){double m;int n;while(scanf("%lf%d",&m,&n)!=EOF){if(m==-1&&n==-1)//当n==-1且m==-1时跳出循环,程序运行结束break;for(int i=0;i<n;i++){scanf("%lf%lf",&buf[i].j,&buf[i].f);//输入n组物品的总重和总价值buf[i].s=buf[i].j/buf[i].f;//计算性价比,存入到结构体goods的性价比属性中}sort(buf,buf+n);//使各物品按照性价比降序排列int idx=0;//当前货物下标double ans=0;//累加所能得到的总重量while(m>0&&idx<n){//循环条件为,既有物品剩余(idx<n)还有钱剩余(m>0)时继续循环if(m>buf[idx].f){ans+=buf[idx].j;m-=buf[idx].f;}//若能买下全部该物品else{//ans+=buf[idx].j*m/buf[idx].f;ans+=buf[idx].s*m;m=0;}//若只能买下部分该物品idx++;//继续下一个物品}printf("%.3lf\n",ans);//输出}return 0;}
运行截图
0 0
- 贪心算法实例
- 贪心算法实例
- 贪心算法实例
- TYVJ3680 贪心算法实例
- 哈夫曼树-贪心算法的应用实例
- 贪心算法实例讲解(1)
- 贪心算法实例讲解(2)
- 贪心算法实例讲解(3)
- 贪心算法总结及实例简介
- 贪心算法实例(六):哈夫曼编码
- 贪心算法实例 单源最短路径 Dijkstra算法(c++实现)
- 贪心算法实例:安排会场(Java实现)
- 贪心算法实例:找零钱(Java实现)
- 贪心算法实例(一):多任务分配问题
- 贪心算法实例(二):钱币找零问题
- 贪心算法实例(三):多机调度问题
- 贪心算法实例(四):部分背包问题
- 贪心算法实例(五):小船过河问题
- 属性页对话框和相关的两个类CPropertyPage类和CPropertySheet类
- 金蝶仓库条码管理好处和优点,金蝶盘点机条码数据采集器能够给我们带来的好处
- 栈的应用3——表达式求值
- 温故而知新,人月徒伤悲
- 【Android 个人理解(九)】Activity的生命周期方法的深入理解
- 贪心算法实例
- WSDL
- 牛腩新闻发布系统————fireBug的使用
- 第十三周项目二-形状类族中的纯虚函数
- Java小日历
- 小Y学习andrpid点滴记录一:使用adapter小练习
- CentOS 6.x 升级 Git
- Developing for Android, IV: The Rules: Networking
- JSR: Java Specification Requests