#include <stdio.h>
#include <math.h>
#include <string.h>
double beans_value[10000];
int beans_number[10000];
int beans_sum[10000];
double ans;
/*读入豆子的数量和价值*/
void input_init(int n)
{
/*初始化,置零*/
memset(beans_value,0,sizeof(beans_value));
memset(beans_number,0,sizeof(beans_number));
memset(beans_sum,0,sizeof(beans_sum));
ans = 0;
int i;
for (i=1; i<=n; i++)
{
scanf("%d%d", &beans_sum[i], &beans_number[i]);
beans_value[i] = beans_sum[i] / double(beans_number[i]);
}
}
/*交换*/
void swap(int i, int j)
{
int tmp;
double tmp2;
tmp2 = beans_value[i];
beans_value[i] = beans_value[j];
beans_value[j] = tmp2;
tmp = beans_number[i];
beans_number[i] = beans_number[j];
beans_number[j] = tmp;
tmp = beans_sum[i];
beans_sum[i] = beans_sum[j];
beans_sum[j] = tmp;
}
/*按照豆子价值排序*/
void sort(int n)
{
int i,j;
for (i=1; i<=n; i++)
for (j=i+1; j<=n; j++)
if (beans_value[i]<beans_value[j])
swap(i,j);
}
/*贪心计算出ans的值*/
void calc(int m,int n)
{
int i;
for (i=1; i<=n; i++)
{
if (beans_number[i] >= m)
{
ans += beans_value[i]*m;
break;
}
ans += beans_sum[i];
m -= beans_number[i];
}
}
int main(int argc, char **argv)
{
int m, n;
scanf("%d%d",&m, &n);
while ((m != -1) && (n != -1))
{
input_init(n);
sort(n);
calc(m,n);
printf("%.3lf\n", ans);
scanf("%d%d",&m,&n);
}
return 0;
}
HDU_1009
最新推荐文章于 2021-04-06 19:23:17 发布