3470:【例85.1】 金银岛
[例85.1] 金银岛
1225:金银岛
【信息学奥赛一本通-编程启蒙】3470【例85.1】 金银岛
信息学奥赛一本通1225:金银岛
信息学奥赛 1225-金银岛
T217592 金银岛(信息学奥赛一本通-T1225)
/*
1225:金银岛
http://ybt.ssoier.cn:8088/problem_show.php?pid=1225
*/
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<algorithm>
#define INF 999999999
#define N 101
using namespace std;
struct node
{
int w;
int c;
double g;
}a[N],temp;
int main( void )
{
int t;
int W,m;
cin>>t;
while(t--)
{
double cnt=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)
{
cnt+=a[i].c;
W-=a[i].w;
}
else
{
cnt+=a[i].g*W;
break;
}
}
printf("%.2lf\n",cnt);
}
return 0;
}
#include<bits/stdc++.h>
using namespace std;
struct coin{
int m,v;
}a[105];
int k,w,s,c;
double ans;
bool cmp(coin x,coin y){
return x.v*y.m>y.v*x.m;
}
void solve(){
ans=0;
cin>>w>>s;
c=w;
for(int j=1;j<=s;j++){
cin>>a[j].m>>a[j].v;
}
sort(a+1,a+s+1,cmp);
int cnt=0;
bool flag=false;
for(int j=1;j<=s;j++){
if(a[j].m>c){
cnt=j;
flag=true;
break;
}
c-=a[j].m;
ans+=a[j].v;
}
if(flag){
ans+=1.0*c*a[cnt].v/a[cnt].m;
}
printf("%.2lf\n",ans);
}
int main(){
cin>>k;
for(int i=1;i<=k;i++){
solve();
}
return 0;
}
《信息学奥赛一本通 编程启蒙C++版》3406-3410(5题)
41、《信息学奥赛一本通 编程启蒙 C++版》 3401-3410(10题)
41、《信息学奥赛一本通 编程启蒙 C++版》 3401-3410(10题)_3407:【例70.2】 求a-b字符串-CSDN博客
《信息学奥赛一本通 编程启蒙C++版》3411-3415(5题)
《信息学奥赛一本通 编程启蒙C++版》3416-3420(5题)
《信息学奥赛一本通 编程启蒙C++版》3416-3420(5题)_3418:【例72.3】 提取数字串按数值排序-CSDN博客
《信息学奥赛一本通 编程启蒙 C++版》 3411-3420(10题)
《信息学奥赛一本通 编程启蒙C++版》3421-3425(5题)
https://blog.csdn.net/dllglvzhenfeng/article/details/139640998