#include <iostream>
#include <algorithm>
#include <cstdio>
using namespace std;
int M,N;
typedef struct
{
float J;
float F;
double Aver;
}room;
room Rooms[3001];
int Cmp(const room a,const room b)
{
return a.Aver > b.Aver;
}
int main()
{
while(cin>>M>>N,(M != -1)&&(N != -1))
{
for(int i = 0; i < N; i++)
{
cin>>Rooms[i].J>>Rooms[i].F;
Rooms[i].Aver = (Rooms[i].J)/(Rooms[i].F);
}
sort(Rooms,Rooms+N,Cmp);
double sum = 0;
double res = 0;
int j = 0;
while(sum < M && j < N)
{
if(Rooms[j].F < (M - sum))
{
sum += Rooms[j].F;
res += Rooms[j].J;
}
else
{
res += Rooms[j].Aver*(M - sum);
sum = M;
break;
}
j++;
}
printf("%.3lf\n",res);
}
return 0;
}
hdu1009贪心
最新推荐文章于 2022-11-19 08:50:17 发布
本文探讨了排序算法和数据结构的基本概念及其在实际问题解决中的应用,详细介绍了多种排序算法如冒泡排序、选择排序、插入排序、快速排序、堆排序等,并深入分析了它们的时间复杂度和空间复杂度。同时,文章还覆盖了链表、数组、栈、队列、二叉树等数据结构的原理与实现,展示了它们在计算机科学领域的广泛应用。

275

被折叠的 条评论
为什么被折叠?



