小鱼儿在一次探险途中发现了一个山洞,并且在这个山洞里找到了宝藏,可是小鱼儿发现想要把宝藏全部带走是不可能的(因为他只带了一个袋子),不过很快他就发现每个宝物旁边都有几个字,上面写着宝物的体积和价值,而且这些宝物可以分割成任意大小。小鱼儿想知道如何选取宝物,才能使带走宝物的价值最大。
代码参考:
#include<bits/stdc++.h>
using namespace std;
struct bw {
int tj;
double jz;
double jzmd;
};
void xuanzepaixu(bw a[], int n) {
int min;
bw t;
for (int i = 0; i < n; i++)
{
min = i;
for (int j = i; j < n; j++)
{
if (a[min].jzmd < a[j].jzmd) {
min = j;
}
}
t = a[i];
a[i] = a[min];
a[min] = t;
}
}
int main()
{
int n, m;
cin >> n >> m;
bw a[100];
for (int i = 0; i < m; i++) {
cin >> a[i].tj >> a[i].jz;
a[i].jzmd = a[i].jz / a[i].tj;
}
xuanzepaixu(a, m);
double s = 0.0;
int t = n,i=0;
while (t > 0) {
if (a[i].tj <= t) {
s += a[i].jz;
t -= a[i].tj;
}else {
s += (t * a[i].jz)/a[i].tj;
break;
}
i++;
}
printf("%.2f\n", s);
return 0;
}