题目是这样的:

圣诞节来临了,中圣诞老人准备分发糖果现在有多箱不同的糖果, 每箱糖果有自己的价值和重量,每箱糖果都可以拆分成任意散装组合带走。圣诞老人的驯鹿雪橇最多只能装下重量W的糖果,请问圣诞老人最多能带走多大价值的糖果。

4表示四种糖果,下面跟着四行数据,第一个表示价值,第二个表示重量,15表示圣诞老人的雪橇能装下的最大重量:1193.0表示能带走的最大价值

样例输入:

4    15

100    4

412    8

266    7

591    2

样例输出

1193.0

思路:当然是拿   价值/重量 比  最大的,通俗一点就是单价最高的嘛!我们可以将每一种糖果封装成一个结构体,有价值、重量、 价值/重量比 三个属性。然后按照价值/重量比从大到小排序。先拿第一个结构体数组,如果不够再拿第二个......这样就是一个贪心算法的思路——从问题的局部出发,不考虑整体,然后由局部解构成整体解。排序我们可以采用快排,看代码

#include<stdio.h>typedef struct{int value;int weight;double price;
}Candy;//交换结构体
void swap(Candy &a,Candy & b)
{Candy temp;temp=a;a=b;b=temp;
}
void QuickSort(Candy a[],int left,int right)
{int i=left;int j=right;double key=a[left].price;if(left>=right){return ;}while(i!=j){while(j>i&&a[j].price<=key)j--;swap(a[i],a[j]);while(j>i&&a[i].price>=key)i++;swap(a[i],a[j]);}QuickSort(a,left,i-1);QuickSort(a,i+1,right);}
int main()
{//totalV 是能拿走的总价值//keepW  是雪橇还能拿的重量int i;double totalV=0.0;int keepW=0;int N,W;Candy a[100];scanf("%d%d",&N,&W);for(i=0;i<N;i++){scanf("%d%d",&a[i].value,&a[i].weight);a[i].price=(double)a[i].value/(double)a[i].weight;}QuickSort(a,0,N-1);i=0;keepW=W;while(keepW>0){//如果能拿的重量大于该糖箱糖果重量,则全拿if(keepW>=a[i].weight){keepW-=a[i].weight;totalV+=a[i].weight*a[i].price;a[i].weight-=a[i].weight;}//否则只能拿 雪橇剩下的重量else{totalV+=keepW*a[i].price;keepW-=keepW;a[i].weight-=keepW;}i++;}printf("%.1lf\n",totalV);return 0;
} 

当然除了样例输出的结果我们要保证正确之外,还要测试一些特殊数据比如临界值等等

运行结果

基础算法——贪心算法(圣诞老人的礼物)相关推荐

  1. JavaScript 算法 -- 贪心算法

    文章目录 贪心算法 例题一:分饼干 例题二:买卖股票的最佳时机 II 贪心算法 贪心算法是算法设计的一种方法. 期盼通过每个阶段的局部最优选择,从而达到全局的最优,但最后的结果不一定最优. 例题一:分 ...

  2. [python算法]贪心算法+实例

    目录 什么是贪心算法 应用实例 找零问题 背包问题 拼接数字问题 活动选择问题 什么是贪心算法 贪心算法(又称贪婪算法)是指,在对问题求解时,总是做出在当前看来是最好的选择. 也就是说,不从整体最优上 ...

  3. 基础算法 —— 贪心算法

    [概述] 贪心算法是从问题的初始状态出发,通过若干次的贪心选择而得到的最优值的一种求解策略,即贪心策略. 简单来说,贪心策略是一种在每次决策时采取当前意义下最优策略的算法,做出的选择至少在某种约束条件 ...

  4. 基础算法 —— 贪心算法

    [概述] 贪心算法是从问题的初始状态出发,通过若干次的贪心选择而得到的最优值的一种求解策略,即贪心策略. 简单来说,贪心策略是一种在每次决策时采取当前意义下最优策略的算法,做出的选择至少在某种约束条件 ...

  5. 扔掉你的算法书!1小时零基础拿下贪心算法!(17道题+万字儿童级解析+数十张图解)

    前几天的文章中我写到了一些关于零基础学习回溯算法的一些步骤和细节,在刷题的过程中发现了很多贪心算法的题很有趣,于是今天他来了,准备了好17道题来供大家共同学习,并附上了十分详细的题解,与附带了注释的优 ...

  6. 算法设计与分析(电子科技大学)(上)算法基础和贪心算法

    算法分析与设计 引论 (1)理解算法和程序的差别 (2)理解判断问题和优化问题这两类计算问题 1.理解指数增长的规模 2.理解渐进表达式 掌握渐进符号Ο.Θ.Ω的含义,能判断一个函数属于哪个渐近增长阶 ...

  7. 基础算法 -- 贪心算法

    题目描述: 给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格. 设计一个算法来计算你所能获取的最大利润.你可以尽可能地完成更多的交易(多次买卖一支股票). 注意:你不能同时参与多笔交易( ...

  8. 贪心题目——圣诞老人的礼物

    例题 圣诞老人的礼物 分发糖果,多箱不同的糖果,每箱有自己的价值和重量,每箱都可以拆分成任意散装组合带走,但是雪橇只能装下W重量的糖果,请问圣诞老人最多能敌啊走多大价值的糖果. 输入: 1⃣️n (箱 ...

  9. 简单贪心问题-圣诞老人的礼物

    1.题目描述: 圣诞老人要给每家每户从不同的礼物,但是圣诞老人的车只能承载一定的重量.请问圣诞老人该怎样装载礼物才能使得整车的总价值最大. 2.解题思路: 看其每个礼物的性价比,谁的性价比最大,则谁先 ...

最新文章

  1. makefile学习(转载)
  2. (传送门)instant run原理
  3. Java 小故事系列 导航
  4. Vista操作系统评估参考资料
  5. mysql中3个月之前日期_在MySQL中从当前日期选择当前日期到3个月之间的日期?
  6. 移动设备安全隐患分析
  7. SQLserver锁和事务隔离级别的比较与使用
  8. WAP开发资料站(最新更新)
  9. Dev控件发布到服务器上后样式表不显示解决方法
  10. kindle导出笔记html,手把手教你导出kindle笔记链接Evernote
  11. 各种调试接口(SWD、JTAG、Jlink、Ulink、STlink)的区别
  12. 杰理之出现一拖二通话下第二台手机通话近端听不见远端说话【篇】
  13. mac备忘录html,MAC 使用备忘录
  14. sd 0:0:0:0: [sda] Assuming drive cache: write through错误解决 本人实测!
  15. Zotero 5.0 + 坚果云同步盘 + papership 配置教程
  16. [原创] PS超写实:手绘铅笔
  17. 【看表情包学Linux】冯诺依曼架构 | 理解操作系统 | 基于 Pintos 实现新的用户级程序的系统调用
  18. 2017年3月18日奇虎360 笔试真题(3个编程题)
  19. 本地文件与服务器同步,本地与服务器文件同步
  20. [求助]hyperledger fabric在创建peer通道时出现this policy requires 1 of the 'Writers' sub-policies to be……

热门文章

  1. 中国移动支付行业投资机会分析与发展战略建议报告2022-2028年
  2. java调用扫描仪1
  3. 酷雷曼一站式图片直播,助力品牌高效传播
  4. Master指令,Control指令,Register指令,PreviousPageType指令,MasterType指令
  5. 杭电oj11页 (c++) 31-40
  6. 产业洞察 | 中台,从北大战略研究所的一座小楼启程
  7. 下列选项中 不能作为C语言标识符的是,2017计算机二级考试C语言复习题及答案...
  8. 如何通过局域网访问自己的网页
  9. 百度技术沙龙第33期回顾:推荐引擎实战(含资料下载)
  10. 2022 年你必须知道的 10 个 Python 库