难度:0
算法:贪心
一分钱一分货,所以排序一下再干就行了
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
const int maxn = 100100;
struct node {
double j , f;
}a[maxn];
bool cmp(node a , node b) {
return a.j / a.f > b.j / b.f;
}
double m;
int n;
int main() {
while(~scanf("%lf%d" , &m , &n) && n != -1) {
for(int i=0;i<n;i++) scanf("%lf%lf" , &a[i].j , &a[i].f);
sort(a , a+n , cmp);
double ans = 0;
for(int i=0;i<n;i++) {
if(m > a[i].f) ans += a[i].j , m -= a[i].f;
else {
ans += m * a[i].j / a[i].f;
break;
}
}
printf("%.3lf\n" , ans);
}
return 0;
}