http://acm.sdut.edu.cn/sdutoj/problem.php?action=showproblem&problemid=2278
注意qsort对小数的排序!!!
#include <stdio.h>
#include <stdlib.h>
typedef struct node
{
int weight;
int money;
double unit;
}Wear_House;
Wear_House house[52];
int Compare(const void* a,const void* b)
{
Wear_House* x=(Wear_House*)a;
Wear_House* y=(Wear_House*)b;
return y->unit > x->unit?1:-1;
}
int main()
{
int n,m,i,sum_Money;
double sum_Weight;
while(scanf("%d %d",&n,&m)!=EOF)
{
if(n==-1&&m==-1)
break;
for(i=0;i<m;i++)
{
scanf("%d %d",&house[i].weight,&house[i].money);
house[i].unit = house[i].weight*(1.0)/house[i].money;
}
qsort(house,m,sizeof(Wear_House),Compare);
sum_Money=0;
sum_Weight=0.0;
for(i=0;i<m;i++)
{
sum_Money+=house[i].money;
sum_Weight+=house[i].weight;
if(sum_Money>n)
{
sum_Money-=house[i].money;
sum_Weight-=house[i].weight;
break;
}
}
sum_Weight+=((n - sum_Money)*house[i].unit);
printf("%.3f\n",sum_Weight);
}
return 0;
}
/**************************************
Problem id : SDUT OJ 2278
User name : 2333
Result : Accepted
Take Memory : 316K
Take Time : 0MS
Submit Time : 2016-07-19 12:30:54
**************************************/