OpenJudge 2795 金银岛
来源:互联网 发布:windows安装lua环境 编辑:程序博客网 时间:2024/04/30 05:30
1.链接地址:
http://bailian.openjudge.cn/practice/2795/
2.题目:
- 总Time Limit:
- 3000ms
- Memory Limit:
- 65536kB
- Description
- 某天KID利用飞行器飞到了一个金银岛上,上面有许多珍贵的金属,KID虽然更喜欢各种宝石的艺术品,可是也不拒绝这样珍贵的金属。但是他只带着一个口袋,口袋至多只能装重量为w的物品。岛上金属有s个种类, 每种金属重量不同,分别为n1, n2, ... , ns,同时每个种类的金属总的价值也不同,分别为v1,v2, ..., vs。KID想一次带走价值尽可能多的金属,问他最多能带走价值多少的金属。注意到金属是可以被任意分割的,并且金属的价值和其重量成正比。
- Input
- 第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)。- Output
- k行,每行输出对应一个输入。输出应精确到小数点后2位。
- Sample Input
250410 100 50 30 7 34 87 1001000051 43 43 323 35 45 43 54 87 43- Sample Output
171.93508.00
3.思路:
贪心问题,主要要注意qsort的时候不能直接相减返回,要注意精度
4.代码:
1 #include <iostream> 2 #include <cstdio> 3 #include <cstdlib> 4 #include <cmath> 5 6 using namespace std; 7 8 struct METAL 9 {10 double price;11 int total;12 int weight;13 };14 15 int cmp(const void* a,const void *b)16 {17 METAL metal_a = *((METAL *)a);18 METAL metal_b = *((METAL *)b);19 20 if(metal_b.price > metal_a.price) return 1;21 else if(metal_b.price == metal_b.price) return 0;22 else return -1;23 }24 25 int main()26 {27 //freopen("C://input.txt","r",stdin);28 29 int i;30 31 int k;32 cin >> k;33 34 while(k--)35 {36 int w;37 int s;38 cin >> w >> s;39 40 METAL *arr_metal = new METAL[s];41 42 43 for(i = 0; i < s; ++i)44 {45 cin >> arr_metal[i].weight >> arr_metal[i].total;46 arr_metal[i].price = arr_metal[i].total * 1.0 / arr_metal[i].weight;47 }48 49 qsort(arr_metal,s,sizeof(METAL),cmp);50 51 //for(i = 0; i < s; ++i) cout << arr_metal[i].price << " " << arr_metal[i].weight << endl;52 53 double sum = 0.0;54 for(i = 0; i < s; ++i)55 {56 if(w > arr_metal[i].weight) {sum += arr_metal[i].total;w -= arr_metal[i].weight;}57 else {sum += w * arr_metal[i].price; break;}58 }59 60 cout.setf(ios::fixed);61 cout.precision(2);62 cout << sum << endl;63 64 delete [] arr_metal;65 }66 67 return 0;68 }
0 0
- OpenJudge 2795 金银岛
- 【openjudge】金银岛
- 金银岛
- 金银岛
- 金银岛
- POJ百炼-2795-金银岛
- 百练2795:金银岛题解
- 百炼-2795-金银岛-C语言-快速排序
- 《金银岛》歌词
- H - 金银岛
- OpenJudge
- 金银岛“网住”大宗交易
- |NOIOJ|贪心|1797:金银岛
- 【NOI OJ】1797 金银岛
- 贪心--金银岛
- 1797:金银岛(4.6算法之贪心)
- [OpenJudge]胡
- OPENJUDGE LIST
- php-5.x.x-Win32.zip的组织 .
- OpenJudge/Poj 2000 Gold Coins
- 第十四周oj项目三杨辉三角
- 第十五周项目2-程序阅读(对指针的理解1)
- 安卓项目出现红色感叹号的解决方案
- OpenJudge 2795 金银岛
- 模板:保留小数位后多少位
- OpenJudge/Poj 2001 Shortest Prefixes
- OpenJudge/Poj 1088 滑雪
- OpenJudge/Poj 2013 Symmetric Order
- OpenJudge 2773 2726 2727 采药
- OpenJudge/Poj 2027 No Brainer
- OpenJudge 2786 Pell数列
- OpenJudge/Poj 2105 IP Address