原题链接
1225:金银岛
参考代码
#include<bits/stdc++.h>
using namespace std;
struct gold{//定义一个结构体,金属
int num;
int value;
double perValue;
}a[105];
//比较规则:单位价值高的排前面
bool cmp(gold a, gold b){
return a.perValue>b.perValue;
}
int main(){
///1.输入
int n;
cin>>n;//几组测试数据
int weight;//口袋最大承重
int m; //金属的数量
for(int i=1; i<=n; ++i){
cin>>weight;
cin>>m;
for(int j=1; j<=m; ++j)
{
cin>>a[j].num>>a[j].value;
a[j].perValue=a[j].value/(double)a[j].num;
}
//2.排序
sort(a+1,a+m+1,cmp);
//3.拿金属
double total=0;//总价值
for(int j=1; j<=m; ++j){
//口袋有空间,则先拿最值钱的,依次类推
if(weight-a[j].num>0){
total+=a[j].value;
weight=weight-a[j].num;
}
else{
total+=weight*a[j].perValue;//如果空间不够,只拿部分
break;
}
}
printf("%.2lf\n",total);
}
return 0;
}