/*贪心策略按照性价比排序,买的话每一次只买性价比最高的*/
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
using namespace std;
struct node{
int pean, cat;
double core;//性价比
bool operator < (const node a) const{
if(core == a.core)
return pean > a.pean;
return core > a.core;
}
}a[1010];
int main()
{
int n, m;
while(scanf("%d%d", &n, &m) != EOF && (n != -1 || m != -1)){
for(int i = 0; i < m; i++){
scanf("%d%d", &a[i].pean, &a[i].cat);
a[i].core = (a[i].pean * 1.0) / a[i].cat;
}
sort(a, a+m);
double sum = 0;
for(int i = 0; i < m;){
if(n == 0) break;
if(n > 0){
if((n*a[i].core) > a[i].pean){
sum += a[i].pean;
a[i].pean = 0;
n -= a[i].cat;
i++;
}
else{
sum += (n * a[i].core);
a[i].pean = a[i].pean - (n*a[i].core);
n = 0;
}
}
}
printf("%.3f\n", sum);
}
return 0;
}
hdu1009(贪心)
最新推荐文章于 2022-11-19 08:50:17 发布