思路
该问题是一个典型的贪心算法问题,具体物品可分割,同时要注意好题目所要求的精度问题。
#include<iostream>
#include <iomanip>
#include<algorithm>
using namespace std;
const int maxn = 110;
struct bag
{
double m, v;
}p[maxn];
bool cmp( bag a, bag b)
{
return a.v / a.m > b.v / b.m;
}
int main() {
int n;
cin >> n;
int t;
cin >> t;
double ans=0.00;
for (int i = 1; i <= n; ++i)
{
cin >>p[i].m>>p[i].v;
}
sort(p + 1, p + n + 1, cmp);
for (int i = 1; i <= n; ++i)
{
if (p[i].m <= t)
{
ans += p[i].v;
t -= p[i].m;
}
else
{
ans += p[i].v / p[i].m * t;
break;
}
}
printf("%.2f", ans);
return 0;
}