该题是经典的贪心问题,根据平均价值从小到大排序,依次放入背包,直到背包装满为止。

描述

某天KID利用飞行器飞到了一个金银岛上,上面有许多珍贵的金属,KID虽然更喜欢各种宝石的艺术品,可是也不拒绝这样珍贵的金属。但是他只带着一个口袋,口袋至多只能装重量为w的物品。岛上金属有s个种类, 每种金属重量不同,分别为n1, n2, ... , ns,同时每个种类的金属总的价值也不同,分别为v1,v2, ..., vs。KID想一次带走价值尽可能多的金属,问他最多能带走价值多少的金属。注意到金属是可以被任意分割的,并且金属的价值和其重量成正比。

输入

第1行是测试数据的组数k,后面跟着k组输入。

每组测试数据占3行,第1行是一个正整数w (1 <= w <= 10000),表示口袋承重上限。第2行是一个正整数s (1 <= s <=100),表示金属种类。第3行有2s个正整数,分别为n1, v1, n2, v2, ... , ns, vs分别为第一种,第二种,...,第s种金属的总重量和总价值(1 <= ni <= 10000, 1 <= vi <= 10000)。

输出

k行,每行输出对应一个输入。输出应精确到小数点后2位。

样例输入

2
50
4
10 100 50 30 7 34 87 100
10000
5
1 43 43 323 35 45 43 54 87 43

样例输出

171.93
508.00

解题代码:

#include<stdio.h>
#include<iostream>
#include<algorithm>
#include<math.h>
using namespace std;
//结构体记录金属
struct gift{double weight;double value;double avl;
}gf[110];
bool cmp(gift a,gift b){return (a.avl>b.avl); //按照平均价值排序
}
int main(){int k,w,s;//k为组数 w为总重量 s为金属种类 x,y代表weight valuescanf("%d",&k);while(k>0){scanf("%d%d",&w,&s);  //w为限重 s为种类个数for(int i=0;i<s;i++){scanf("%lf%lf",&gf[i].weight,&gf[i].value);gf[i].avl=1.0*gf[i].value/gf[i].weight;}sort(gf,gf+s,cmp); //排序//装入背包double ans=0,va=0;  //开始时装了0,价值0for(int i=0;i<s;i++){if(ans+gf[i].weight<=w){ans+=gf[i].weight;va+=gf[i].value;}else{va+=gf[i].avl*(w-ans);break;}}//输出该组的结果printf("%.2lf\n",va);k--; //处理完一组数据}return 0;
}

北大OJ(POJ 2795)金银岛相关推荐

  1. 北大OJ(POJ 2503)在线翻译

    描述 你刚从滑铁卢搬到一个大城市.这里的人说着一种难以理解的外语方言.幸运的是,你有一本字典来帮助你理解它们. 输入 输入由多达100,000个字典条目组成,后面跟着一个空行,后面跟着多达100,00 ...

  2. 北大OJ(POJ 2808)校门外的树

    描述 在[0,L]的区间内,每个整数都有一棵树,现因某些原因移走一些数 求移走这些树后还剩多少棵树 输入 输入的第一行有两个整数L(1 <= L <= 10000)和 M(1 <= ...

  3. 北大OJ(POJ 3237)鸡兔同笼

    描述 一个笼子里面关了鸡和兔子(鸡有2只脚,兔子有4只脚,没有例外).已经知道了笼子里面脚的总数a,问笼子里面至少有多少只动物,至多有多少只动物 输入 第1行是测试数据的组数n,后面跟着n行输入.每组 ...

  4. 北大OJ百练——4073:最长公共字符串后缀(C语言)

    刚刚看到一道北大的OJ题,很简单的一道题.原题如下(偷个懒,直接截图): 看完这道题,我想大家都和我一样觉得这道题很简单,事实也是如此,毕竟通过率很高. 我先来说一下我的思路吧.我是想先把这些所有的字 ...

  5. 北大OJ百练——3179:最长单词(C语言)

    废话不多说,先来上题目: OJ的这题关键在于如何计算我所选择的开始位置和结束位置.我用的方法是有4个参数来存储起来,start, buffStart, lenth, maxLenth. start: ...

  6. 北大OJ百练——4074:积水量(C语言)

    前言: 最近感觉算法是一个很重要的东西,于是又把以前的OJ捡起来做做了,看到一题叫做积水量的题目,通过率是100%,虽然说是没有什么挑战,不过很久没写OJ了,让自己进入状态也不错的. 描述: 凹凸不平 ...

  7. java北大oj1001_这个——北大 ACM POJ 1001 Exponentiation C/C++

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 帮忙看下 1.在自己电脑上测试没有问题,oj显示答案错误.提交的语言是c++. 2.这个代码哪里不符合C99标准,为什么不能使用C提交. -------- ...

  8. pek (北大oj)3070

    思路:矩阵快速幂, 二分加速 #include<cstdio> #include<cstring> #define ll long long #define mod 10000 ...

  9. 北大OJ百练——2721:忽略大小写比较字符串大小

    这题很简单,就是一个大小写转换的算法,可能有一个函数专门做这个事,大家可以查查,我想应该是有的. 那么我的代码思路就是一个个去比较,不管它是大写字母还是小写字母,都一并把它们都专成小写字母,再去比较. ...

最新文章

  1. WPF: RenderTransform特效
  2. 【深度学习入门到精通系列】Mean Iou
  3. 互联网1分钟 |1123
  4. 七十二、区间合并,插入求交集, 删除被覆盖区间
  5. C# 面向对象版 Windows挖雷 v0.8 release 非FloodFill算法解
  6. SAP UI5页面动画效果的实现,实际借用了jQuery的库文件
  7. mysql启动错误排查-无法申请足够内存
  8. 如约而至 Nexus 6 的 Android 7.1.1 已经上线
  9. 【Kafka】Kafka eagle 监控界面无数据
  10. [笔记] 最大权闭合子图最大流最小割相关笔记
  11. android中的oom,Android OOM Adjustments
  12. python指令查询_Python命令行实现—查全国7天天气
  13. PDMS Pipeline Tool 教程(二):通用功能
  14. React native 分享 友盟分享SDK
  15. python全套 百度云-2018年6月北京黑马python24期全套视频课程
  16. 2021牛客寒假算法基础集训营1 C 无根树问题的处理策略 前序后序遍历 奇偶匹配 DFS
  17. 技嘉主板raid组建方法_性能瞬间飙升!教你如何组RAID0磁盘阵列
  18. Giant beast
  19. 知识图谱论文读后感001
  20. 机器如何猜你所想?阿里小蜜预测平台揭秘

热门文章

  1. 百度实习生前端面试面经
  2. gpl2 gpl3区别_GPL的下降?
  3. (10)js操作符(运算符)
  4. java/04/String类的特点,String的常用方法,this关键字
  5. MyBatis 级联
  6. Bootstrap3 静态模态对话框
  7. 八.激光SLAM框架学习之LeGO-LOAM框架---框架介绍和运行演示
  8. 五.激光SLAM框架学习之A-LOAM框架---项目工程代码介绍---3.laserOdometry.cpp--前端雷达里程计和位姿粗估计
  9. ROS笔记(2) Kinetic 的安装和配置
  10. php调用外站数据,dedecms数据库外部调用,两dedecms站点数据远程调用