这题是一道简单的可拆分的贪心题目,需要注意的是,我们定义的结构体里面都应该用double类型, 或者float类型,不然两个int相除,就失去了精度(强转也可以)。
#include <cstdio>
#include <algorithm>
using namespace std;
int m, n;
struct Room {
double j, f;
double k;
bool operator < (const Room &b)const {
return k > b.k;
}
} a[1000];
int main()
{
while (scanf("%d%d",&m,&n)&&m!=-1&&n!=-1) {
for (int i = 0; i < n;i++) {
scanf("%lf%lf", &a[i].j, &a[i].f);
a[i].k = a[i].j / a[i].f;
}
sort(a, a + n);
double pock=0, value=0;
for (int i = 0; i < n; i++) {
if (pock+a[i].f<m) {
value += a[i].j;
pock += a[i].f;
}
else {
value += (a[i].j / a[i].f) * (m - pock);
break;
}
}
printf("%.3lf
", value);
}
return 0;
}