一本通1225——金银岛

2023-10-13 23:10
文章标签 一本 1225 金银岛

本文主要是介绍一本通1225——金银岛,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

题目 

原题链接icon-default.png?t=M666http://ybt.ssoier.cn:8088/problem_show.php?pid=1225【题目描述】

某天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

审题

由于金属是可以任意分割的,这道题就可以用贪心来解。只需要把每个物品的性价比算出,排序即可。

步骤

1.定义变量和结构体

int t;
int W,m;
struct node{int w;int c;double g;//每个物品的性价比
}a[120],temp;

2.数据输入

cin>>t;
while(t--)
{double res=0;cin>>W>>m;for(int i=1;i<=m;i++){cin>>a[i].w>>a[i].c;a[i].g=a[i].c*1.0/a[i].w;}
}

3.排序、累加

for(int i=1;i<=m;i++)
{for(int j=i+1;j<=m;j++){if(a[i].g<a[j].g){temp=a[i];a[i]=a[j];a[j]=temp;}}
}
for(int i=1;i<=m;i++)
{if(W>=a[i].w){res+=a[i].c;W-=a[i].w;}else{res+=a[i].g*W;break;}
}
printf("%.2lf\n",res);

 完整代码:

#include<bits/stdc++.h>
using namespace std;
int t;
int W,m;
struct node{int w;int c;double g;
}a[120],temp;
int main()
{cin>>t;while(t--){double res=0;cin>>W>>m;for(int i=1;i<=m;i++){cin>>a[i].w>>a[i].c;a[i].g=a[i].c*1.0/a[i].w;}for(int i=1;i<=m;i++){for(int j=i+1;j<=m;j++){if(a[i].g<a[j].g){temp=a[i];a[i]=a[j];a[j]=temp;}}}for(int i=1;i<=m;i++){if(W>=a[i].w){res+=a[i].c;W-=a[i].w;}else{res+=a[i].g*W;break;}}printf("%.2lf\n",res);}return 0;
}

中间排序的两个for循环也可以简写成一行,只需要在上面定义一个比较规则即可。

代码如下:

#include<bits/stdc++.h>
using namespace std;
int t;
int W,m;
struct node{int w;int c;double x;
}a[120],temp;
bool cmp(node a,node b)
{return a.x>b.x;
}
int main()
{cin>>t;while(t--){double res=0;cin>>W>>m;for(int i=1;i<=m;i++){cin>>a[i].w>>a[i].c;a[i].x=a[i].c*1.0/a[i].w;}sort(a+1,a+m+1,cmp);//相当于两个for循环for(int i=1;i<=m;i++){if(W>=a[i].w){res+=a[i].c;W-=a[i].w;}else{res+=a[i].x*W;break;}}printf("%.2lf\n",res);}return 0;
}

这篇关于一本通1225——金银岛的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/206494

相关文章

【简历】25届南京某一本JAVA简历:简历通过率还好,但是拿不到OFFER

注:为保证用户信息安全,姓名和学校等信息已经进行同层次变更,内容部分细节也进行了部分隐藏 简历说明 今天看一份25届南京某一本大学的Java简历。 这个简历呢,学校是一本。我们说上来先要定校招层次,这个层次就按照中厂来讲。因为现在很多的双非一本目标都是在中厂。 这个同学有个实习经历,一本有八成的同学主项目都是重复的。HR他只能看到项目重不重复,要点对不对他不知道,就从这个角度来看,这位同学

【简历】25届重庆某一本JAVA简历:比赛项目描述都是无用的废话

注:为保证用户信息安全,姓名和学校等信息已经进行同层次变更,内容部分细节也进行了部分隐藏 简历说明 这是一个重庆某一本大学25届硕士的Java简历,这个简历,其实还是有一定东西的,然后我们说这个,这是一个重点类的一个一本,所以我们说就按照大厂来讲,但是,其实这后面的这个项目经历不行,就按大厂来讲吧,但是这个按大厂的话,这个学校在大厂里面是最差的一个背景了,他是个减分项,项目这块呢,优势不强啊,

sdut 1225 编辑距离(dp)

题目描述 假设字符串的基本操作仅为:删除一个字符、插入一个字符和将一个字符修改成另一个字符这三种操作。  我们把进行了一次上述三种操作的任意一种操作称为进行了一步字符基本操作。 下面我们定义两个字符串的编辑距离:对于两个字符串a和b,通过上述的基本操作,我们可以把a变成b或b变成a,那么字符串a变成字符串b需要的最少基本字符操作步数称为字符串a和字符串b的编辑距离。 例如:a="AB

基础算法--递推算法[信奥一本通]

本节所讲题源自【信奥一本通】C++版:基础算法-第三章-递推算法 相信大家应该都接触过数列的概念。哎哟,一直在跟数组打交道,说数列感觉好陌生,哈哈。数列中的迭代法大家都还记得吗:通过反复应用特定规则,推导出某一点起始的连续的后续数列。 我们的递推也是这样,给出一些初始值,从题目中找出后续数据应该与已知数据存在哪些关系,能不能写出一个公式或者经过同种操作进行反复推导,得出结论。在数学中

一本读懂数据库发展史的书

数据库及其存储技术,一直以来都是基础软件的主力。数据库系统的操作接口标准,也是应用型软件的重要接口,关系重大。 作为最“有感”的系统软件,数据库的历史悠久、品类繁多、创新活跃。 对数据库历史发展的介绍,有利于新一代技术人员的学习和传承;对未来演进的探究,有利于数据库开发者的思考和实践。 如果想对当今数据库体系有一个深入的了解,最好学习一下数据库的发展史。这对于在我们脑海里建立数据库体系的知识

C++题解(23) 信息学奥赛一本通:1026:空格分隔输出

【题目描述】 读入一个字符,一个整数,一个单精度浮点数,一个双精度浮点数,然后按顺序输出它们,并且要求在他们之间用一个空格分隔。输出浮点数时保留6位小数。 【输入】 第一行是一个字符; 第二行是一个整数; 第三行是一个单精度浮点数; 第四行是一个双精度浮点数。 【输出】 输出字符、整数、单精度浮点数和双精度浮点数,之间用空格分隔。 【输入样例】 a122.33.

Ural 1225 Flags(DP)

题目地址:Ural 1225 感觉刷DP的时候到了。。 这个题还是很简单的,用个二维数组,第一维表示当前位是什么颜色,只有1,2,3。第二维表示当前是第几维。由于蓝色只能在中间,所以统计只能统计当前位是白和红的时候。 代码如下: #include <iostream>#include <cstdio>#include <string>#include <cstring>#inc

【简历】25届青岛某一本JAVA简历:中厂不要强调算法,面试官听不懂

注:为保证用户信息安全,姓名和学校等信息已经进行同层次变更,内容部分细节也进行了部分隐藏 简历说明 今天我们要看的是一位来自25届青岛某一本硕士同学的Java简历。 依旧是先判断自己要投什么层次的厂,也就是我们校招第一法则:定层次。 因为在不同的层次,面试官的要求,考察的时间点和内容都不太一样。 一本的话,我们大多定在中厂,在一线城市薪资在一万到一万五左右。 但有些比较好的理工类或者是

如何用GPT写一本玄幻爽文小说?轻松上手

如果要写一本玄幻爽文小说,你完全可以用GPT来帮忙,这可是一条捷径。无论是创造奇妙的世界观,设计角色,还是编写剧情,我们都可以用GPT快速推进创作。下面就是一份实操教程,从构思到完成一本玄幻爽文,手把手教你如何用GPT搞定! 1. 构思故事的核心:背景设定与主线 步骤1:确定世界观 玄幻爽文的魅力在于其独特的世界观,比如修真世界、魔法大陆、异能都市等等。利用GPT生成背景设定,可

选书 -信息奥赛一本通书

学校放寒假时,信息学竞赛辅导老师有A,B,C,D,E五本书,要分给参 加培训的张、王、刘、孙、李五位同学,每人只能选一本书。老师事先让每个人 将自己喜欢的书填写在如下的表格中。然后根据他们填写的表来分配书本,希望 设计一个程序帮助老师求出所有可能的次数,使每个学生都满意。 #define _CRT_SECURE_NO_WARNINGS#include <iostream>#include <