题目地址:http://ac.jobdu.com/problem.php?cid=1040&pid=20
C语言源码:
#include<stdio.h>
#include<stdlib.h>
typedef struct room
{
int j,f;
float w;
}room;
int cmp(const void *a,const void *b)
{
room *aa=(room *)a;
room *bb=(room *)b;
return aa->w>bb->w?-1:1;
}
int main()
{
int m,n,i,weight;
float max;
room r[1001];
scanf("%d %d",&m,&n);
while(m!=-1||n!=-1)
{
for(i=0;i<n;i++)
{
scanf("%d %d",&r[i].j,&r[i].f);
r[i].w=(float)r[i].j/r[i].f;
}
qsort(r,n,sizeof(r[0]),cmp);
i=0;
weight=0;
max=0;
while(i<n&&weight<=m)
{
if(weight+r[i].f<=m)
{
max+=r[i].j;
weight+=r[i].f;
}
else
{
max+=(float)(m-weight)*r[i].w;
break;
}
i++;
}
printf("%.3f\n",max);
scanf("%d %d",&m,&n);
}
}