北大OJ(POJ 2795)金银岛
该题是经典的贪心问题,根据平均价值从小到大排序,依次放入背包,直到背包装满为止。
描述
某天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)金银岛相关推荐
- 北大OJ(POJ 2503)在线翻译
描述 你刚从滑铁卢搬到一个大城市.这里的人说着一种难以理解的外语方言.幸运的是,你有一本字典来帮助你理解它们. 输入 输入由多达100,000个字典条目组成,后面跟着一个空行,后面跟着多达100,00 ...
- 北大OJ(POJ 2808)校门外的树
描述 在[0,L]的区间内,每个整数都有一棵树,现因某些原因移走一些数 求移走这些树后还剩多少棵树 输入 输入的第一行有两个整数L(1 <= L <= 10000)和 M(1 <= ...
- 北大OJ(POJ 3237)鸡兔同笼
描述 一个笼子里面关了鸡和兔子(鸡有2只脚,兔子有4只脚,没有例外).已经知道了笼子里面脚的总数a,问笼子里面至少有多少只动物,至多有多少只动物 输入 第1行是测试数据的组数n,后面跟着n行输入.每组 ...
- 北大OJ百练——4073:最长公共字符串后缀(C语言)
刚刚看到一道北大的OJ题,很简单的一道题.原题如下(偷个懒,直接截图): 看完这道题,我想大家都和我一样觉得这道题很简单,事实也是如此,毕竟通过率很高. 我先来说一下我的思路吧.我是想先把这些所有的字 ...
- 北大OJ百练——3179:最长单词(C语言)
废话不多说,先来上题目: OJ的这题关键在于如何计算我所选择的开始位置和结束位置.我用的方法是有4个参数来存储起来,start, buffStart, lenth, maxLenth. start: ...
- 北大OJ百练——4074:积水量(C语言)
前言: 最近感觉算法是一个很重要的东西,于是又把以前的OJ捡起来做做了,看到一题叫做积水量的题目,通过率是100%,虽然说是没有什么挑战,不过很久没写OJ了,让自己进入状态也不错的. 描述: 凹凸不平 ...
- java北大oj1001_这个——北大 ACM POJ 1001 Exponentiation C/C++
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 帮忙看下 1.在自己电脑上测试没有问题,oj显示答案错误.提交的语言是c++. 2.这个代码哪里不符合C99标准,为什么不能使用C提交. -------- ...
- pek (北大oj)3070
思路:矩阵快速幂, 二分加速 #include<cstdio> #include<cstring> #define ll long long #define mod 10000 ...
- 北大OJ百练——2721:忽略大小写比较字符串大小
这题很简单,就是一个大小写转换的算法,可能有一个函数专门做这个事,大家可以查查,我想应该是有的. 那么我的代码思路就是一个个去比较,不管它是大写字母还是小写字母,都一并把它们都专成小写字母,再去比较. ...
最新文章
- WPF: RenderTransform特效
- 【深度学习入门到精通系列】Mean Iou
- 互联网1分钟 |1123
- 七十二、区间合并,插入求交集, 删除被覆盖区间
- C# 面向对象版 Windows挖雷 v0.8 release 非FloodFill算法解
- SAP UI5页面动画效果的实现,实际借用了jQuery的库文件
- mysql启动错误排查-无法申请足够内存
- 如约而至 Nexus 6 的 Android 7.1.1 已经上线
- 【Kafka】Kafka eagle 监控界面无数据
- [笔记] 最大权闭合子图最大流最小割相关笔记
- android中的oom,Android OOM Adjustments
- python指令查询_Python命令行实现—查全国7天天气
- PDMS Pipeline Tool 教程(二):通用功能
- React native 分享 友盟分享SDK
- python全套 百度云-2018年6月北京黑马python24期全套视频课程
- 2021牛客寒假算法基础集训营1 C 无根树问题的处理策略 前序后序遍历 奇偶匹配 DFS
- 技嘉主板raid组建方法_性能瞬间飙升!教你如何组RAID0磁盘阵列
- Giant beast
- 知识图谱论文读后感001
- 机器如何猜你所想?阿里小蜜预测平台揭秘
热门文章
- 百度实习生前端面试面经
- gpl2 gpl3区别_GPL的下降?
- (10)js操作符(运算符)
- java/04/String类的特点,String的常用方法,this关键字
- MyBatis 级联
- Bootstrap3 静态模态对话框
- 八.激光SLAM框架学习之LeGO-LOAM框架---框架介绍和运行演示
- 五.激光SLAM框架学习之A-LOAM框架---项目工程代码介绍---3.laserOdometry.cpp--前端雷达里程计和位姿粗估计
- ROS笔记(2) Kinetic 的安装和配置
- php调用外站数据,dedecms数据库外部调用,两dedecms站点数据远程调用